Ini adalah tantangan yang agak sederhana, tetapi saya tidak dapat menemukan pertanyaan yang benar-benar mirip dengannya. Tantangannya adalah untuk mengambil frekuensi dalam menggunakan STDIN atau yang setara, dan kemudian mengeluarkan nada yang cocok dengan frekuensi itu, dalam Hz, selama 5 detik. Sebagai contoh
Input: 400
Output: (a tone of 400 Hz with a duration of 5 seconds)
Aturan
- Masukan harus diambil melalui STDIN, atau setara dengan bahasa Anda
- Jawabannya harus berupa program lengkap
- Builtin dapat digunakan
- Frekuensi akan berkisar antara 50 - 5000 Hz
- Output harus dimainkan selama 5 detik
- Outputnya harus dalam bentuk gelombang sinus
Uji kasus
Memasukkan: 440
Keluaran:
Memasukkan: 200
Keluaran:
Memasukkan: 4000
Keluaran:
Ini bukan tentang menemukan bahasa dengan solusi terpendek untuk ini (ada beberapa di mana program kosong melakukan trik) - ini adalah tentang menemukan solusi terpendek dalam setiap bahasa. Karenanya, tidak ada jawaban yang akan ditandai sebagai diterima.
Tidak seperti aturan kami yang biasa, jangan ragu untuk menggunakan bahasa (atau versi bahasa) meskipun itu lebih baru daripada tantangan ini. Bahasa yang ditulis khusus untuk mengirimkan jawaban 0-byte untuk tantangan ini adalah permainan yang adil tetapi tidak terlalu menarik.
Perhatikan bahwa harus ada juru bahasa sehingga pengajuan dapat diuji. Diperbolehkan (dan bahkan dianjurkan) untuk menulis sendiri penerjemah ini untuk bahasa yang sebelumnya tidak diterapkan.
Juga mencatat bahwa bahasa yang harus dapat memenuhi kriteria kami biasa untuk bahasa pemrograman .
Katalog
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 63967; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 39060; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "//api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "//api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(42), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
beep()
fungsi. Apakah dijamin itu adalah gelombang sinus?System.Console.Beep
adalah gelombang sinus pada mesin saya (modern, Windows 10), jadi saya pikir itu penting. Solusi pada PPCG umumnya tidak harus portabel.Jawaban:
QBasic,
18 byte(didiskualifikasi)Seperti @pabouk disebutkan, ini menggunakan speaker PC, sehingga memainkan gelombang persegi , bukan gelombang sinus seperti masalahnya. (Persyaratan ini ditambahkan ke masalah setelah jawaban ini diposting, karenanya suara.) Saya akan meninggalkannya di sini untuk anak cucu.
Putar suara pada frekuensi yang dimasukkan untuk 91 ticks, yang sama dengan 5 detik.
sumber
SOUND
perintah menggunakan pengeras suara PC yang dirancang dirancang oleh chip pengatur waktu 8254 yang menghasilkan gelombang persegi. --- Padahal di PC modern 8254 bisa hilang emulasi yang benar dariSOUND
perintah harus menghasilkan gelombang persegi.Python2, 40 byte
Hanya berfungsi di Windows.
sumber
5e3
bekerjaMathematica, 42 byte
Nah jika kita bisa menggunakan built-in ...
Berkat persyaratan untuk program lengkap, ini adalah pertama kalinya saya menggunakan tip golf yang baru saya gunakan
%
(hasil evaluasi terakhir) untuk menyimpan dua byte.Mathematica juga memiliki built-in
Sound
yang membutuhkan pitch dan durasi sebagai argumen, tetapi sayangnya pitch harus diberikan sebagai not musik. Menentukan gelombang suara Anda sendiriPlay
tampaknya merupakan satu-satunya cara untuk bekerja dengan frekuensi.sumber
C #, 80 byte
sumber
Beep
di Jawa?MATLAB, 36 byte
Terimakasih untuk flawr untuk menghemat dua byte.
sumber
2^-12
alih-alih1/4096
.8^-4
bahkan lebih pendek!PowerShell, 32 byte
sumber
FakeASM , 12 byte
Bekerja dengan implementasi referensi Windows (unduh) . Ini memanggil
Beep
fungsi Windows , yang merupakan gelombang sinus pada platform modern.sumber
RDA
membaca nomor dari STDIN dan memasukkannya ke dalam registerA
.Bash + X11,
2720 byteIni mengandung yang tidak patut dicetak, jadi inilah hexdump:
Ini menggunakan frekuensi sebagai argumen baris perintah dan memainkan bunyi bip yang sesuai pada volume 9% (karena tidak ada volume yang ditentukan).
(Catatan: Saya tidak dapat menguji ini karena beberapa masalah dengan komputer saya, tapi saya yakin 99% berhasil.)
sumber
echo <BEL>
di mana<BEL>
karakter sebenarnya, menyimpan 6 byte.JavaScript, 114 byte
Membutuhkan peramban yang agak mutakhir, masukkan frekuensi pada prompt. JSFiddle
sumber
prompt()
dipanggil setelah pengatur waktu audio dimulainew AudioContext()
. Saya percaya yang terpendek yang bisa Anda dapatkan adalah 115 bytec=new AudioContext(p=prompt());with(c.createOscillator()){frequency.value=p;connect(c.destination);start();stop(5)}
.<script>
tag sebagai persyaratan bagi JavaScript untuk dianggap sebagai program lengkap sebelumnya. Saya pikir Anda baik untuk 114. Selain itu, menghapusp
tugas, dan pengaturan hanyafrequency.value=prompt()
akan membuat Anda turun ke 110.p=prompt();with(new AudioContext)with(createOscillator())frequency.value=p,connect(destination),start(),stop(5)
ini menghemat 3 byteUtilitas Bash + Linux, 95
Ini adalah gelombang sinus sejati. Tidak berbunyi bip. Frekuensi input dimasukkan melalui baris perintah:
sumber
Memproses,
148114106 byte(Untuk beberapa alasan, Pemrosesan mengharuskan penggunaan pernyataan impor dan baris baru, jika tidak, ia tidak mengenali pustaka.)
Saya masih belum menemukan cara untuk mengirimkan argumen ke Pemrosesan, meskipun saya tahu itu mungkin, jadi kode ini mengharuskan memiliki file bernama "s" di folder sketsa yang memiliki nilai frekuensi. Jika saya bisa mengetahui cara menyampaikan argumen saya bisa mengganti memuat file dengan
args[0]
.sumber
VB.net,
90 byte, 74 byteTerima kasih untuk Sehnsucht
Ini adalah posting pertama saya jadi jika saya melakukan kesalahan, tolong beri tahu sayasumber
Main(a()As String
danBeep(a(0),5000)
mengurangi total menjadi 74 byte menurut byte counterTurbo / Borland / Gratis / GNU Pascal, 95 byte
Karena masalah dengan fungsi penundaan pada komputer modern (yah, apa pun yang lebih cepat dari 200Mhz) mencoba menjalankan Turbo / Borland pascal, ini mungkin tidak menunggu 5 detik, bahkan dengan perpustakaan CRT yang ditambal
The String to Integer conversion can be done shorter (77 bytes) on FreePascal, and modern derivates, as they have the
StrToInt
function:sumber
Program a;
part, so you can win 10 bytes with omitting it.ParamStr()
and justRead()
it as required: pastebin.com/1Tw2d0D6Perl, 27 bytes
Basically a Perl version of the Python answer (also only works on Windows), if we're allowing modules.
sumber
Vitsy + X11, 20 bytes
A translation of my bash answer. Does not work in the online interpreter (obviously).
Takes input as any non-numeric character followed by the frequency (so for an input of 440 Hz you could do "a440").
Explanation
sumber
C with WinAPI, 82 bytes
Uses the WinAPI Beep() function.
sumber
&x
toscanf
? Also you can declarex
as a parameter to main and let the compiler default its type.&x
toscanf()
. Fixed now; thanks.Hassium, 38 Bytes
sumber
Shadertoy GLSL Sound Shader, 86
"Input" is given via
#define
. Outputs a sinewave with approximate frequency ofF
Hz. Rounded 2*Pi to 6.3, instead of "default" 6.2831, but sounds pretty much the same.Sadly there isn't much to golf here.
sumber
Jolf, 4 bytes, noncompeting
This language addition came after the challenge.
The default wave is a sine wave.
sumber
SmileBASIC, 84 bytes
Converts from Hz to half steps, and plays the a certain note with the a detune value to produce the frequency.
sumber