Esse é um desafio bastante simples, mas não consegui encontrar nenhuma pergunta realmente parecida. O desafio é obter uma frequência no uso de STDIN ou equivalente e emitir um tom que corresponda a essa frequência, em Hz, por 5 segundos. Por exemplo
Input: 400
Output: (a tone of 400 Hz with a duration of 5 seconds)
Regras
- A entrada deve ser recebida através do STDIN, ou equivalente do seu idioma
- A resposta deve ser um programa completo
- Builtins podem ser usados
- A frequência estará em qualquer lugar entre 50 - 5000 Hz
- A saída deve ser reproduzida por 5 segundos
- A saída deve estar na forma de uma onda senoidal
Casos de teste
Entrada: 440
Saída:
Entrada: 200
Saída:
Entrada: 4000
Saída:
Não se trata de encontrar o idioma com a solução mais curta para isso (existem algumas onde o programa vazio faz o truque) - trata-se de encontrar a solução mais curta em todos os idiomas. Portanto, nenhuma resposta será marcada como aceita.
Diferentemente de nossas regras usuais, fique à vontade para usar um idioma (ou versão do idioma), mesmo que seja mais novo que esse desafio. Os idiomas escritos especificamente para enviar uma resposta de 0 byte a esse desafio são um jogo justo, mas não particularmente interessante.
Observe que deve haver um intérprete para que o envio possa ser testado. É permitido (e até encorajado) escrever esse intérprete para um idioma anteriormente não implementado.
Observe também que as línguas que têm a cumprir os nossos critérios usuais para linguagens de programação .
Catálogo
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](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()
função. É garantido que isso é uma onda senoidal?System.Console.Beep
coisa do Windows é uma onda senoidal na minha máquina (moderna, Windows 10), então acho que isso conta. Soluções em PPCG geralmente não precisam ser portáteis.Respostas:
QBasic,
18 bytes(desqualificado)Como o @pabouk mencionado, ele usa o alto-falante do PC, então ele toca uma onda quadrada , não uma onda senoidal como o problema pede. (Esse requisito foi adicionado ao problema após a publicação desta resposta, daí os votos.) De qualquer forma, deixarei aqui para posteridade.
Tocar um som na frequência de entrada por 91 tiques, o que é igual a 5 segundos.
fonte
SOUND
O comando usa o alto-falante do PC que, conforme projetado, foi acionado por um chip de timer 8254 que produz uma onda quadrada. --- Embora nos PCs modernos 8254 possam estar faltando, a emulação correta doSOUND
comando deve produzir uma onda quadrada.Python2, 40 bytes
Só funciona no Windows.
fonte
5e3
?Mathematica, 42 bytes
Bem, se podemos usar built-ins ...
Graças ao requisito de um programa completo, foi a primeira vez que usei minha dica de golfe recentemente descoberta
%
(resultado da última avaliação) para salvar dois bytes.O Mathematica também possui um built-in
Sound
que toma um tom e uma duração como argumentos, mas infelizmente o tom deve ser dado como uma nota musical. Especificar sua própria onda sonora viaPlay
parece ser a única maneira de trabalhar com uma frequência.fonte
C #, 80 bytes
fonte
Beep
ing em Java?MATLAB, 36 bytes
Obrigado ao flawr por salvar dois bytes.
fonte
2^-12
vez de1/4096
.8^-4
é ainda mais curto!PowerShell, 32 bytes
fonte
FakeASM , 12 bytes
Funciona com a implementação de referência do Windows (download) . Ele chama a
Beep
função do Windows , que é uma onda senoidal nas plataformas modernas.fonte
RDA
lê um número de STDIN e o registraA
.Bash + X11,
2720 bytesIsso contém um imprimível, então aqui está um hexdump:
Isso toma a frequência como argumento da linha de comando e emite o bipe apropriado em um volume de 9% (já que nenhum volume foi especificado).
(Nota: não foi possível testar isso devido a alguns problemas no meu computador, mas tenho 99% de certeza de que funciona.)
fonte
echo <BEL>
onde<BEL>
é o caractere real, salva 6 bytes.JavaScript, 114 bytes
Requer um navegador de ponta, digite a frequência no prompt. JSFiddle
fonte
prompt()
é chamado depois que o timer de áudio é iniciadonew AudioContext()
. Eu acredito que o mais curto que você pode obter é de 115 bytesc=new AudioContext(p=prompt());with(c.createOscillator()){frequency.value=p;connect(c.destination);start();stop(5)}
.<script>
tags necessárias para o JavaScript ser considerado um programa completo antes. Eu acho que você é bom para o 114. Além disso, a remoção dap
atribuição, e apenas a criaçãofrequency.value=prompt()
deverá fazê-lo para baixo para 110.p=prompt();with(new AudioContext)with(createOscillator())frequency.value=p,connect(destination),start(),stop(5)
isso economiza 3 bytesUtilitários Bash + Linux, 95
Esta é uma verdadeira onda senoidal. Nenhum sinal sonoro. Frequência de entrada inserida via linha de comando:
fonte
Processando,
148114106 bytes(Por algum motivo, o processamento requer o uso da instrução de importação e da nova linha, caso contrário, ela não reconhece a biblioteca.)
Ainda não descobri como passar argumentos para o Processing, apesar de saber que é possível, portanto esse código requer um arquivo chamado "s" na pasta de sketch que possui o valor de frequência. Se eu descobrir como passar argumentos, poderia substituir o carregamento de arquivos
args[0]
.fonte
VB.net,
90 bytes, 74 bytesGraças a Sehnsucht
Este é o meu primeiro post, então se eu fiz alguma coisa errada, por favor me avisefonte
Main(a()As String
eBeep(a(0),5000)
reduzindo o total para 74 bytes de acordo com o contador de bytesTurbo / Borland / Livre / GNU Pascal, 95 bytes
Devido a problemas com a função de atraso em computadores modernos (bem, qualquer coisa acima de 200 MHz) tentando executar o Turbo / Borland Pascal, isso pode não demorar 5 segundos, mesmo com uma biblioteca CRT corrigida
A conversão String para Inteiro pode ser feita mais curta (77 bytes) no FreePascal e derivadas modernas, pois elas têm a
StrToInt
função:fonte
Program a;
parte, para que você possa ganhar 10 bytes com a omissão.ParamStr()
e apenasRead()
conforme necessário: pastebin.com/1Tw2d0D6Perl, 27 bytes
Basicamente, uma versão Perl da resposta Python (também funciona apenas no Windows), se estivermos permitindo módulos.
fonte
Vitsy + X11, 20 bytes
Uma tradução da minha resposta bash. Não funciona no intérprete online (obviamente).
Recebe a entrada como qualquer caractere não numérico seguido pela frequência (portanto, para uma entrada de 440 Hz, você pode fazer "a440").
Explicação
fonte
C com WinAPI, 82 bytes
Usa a função WinAPI Beep ().
fonte
&x
parascanf
? Além disso, você pode declararx
como parâmetro como main e deixar o compilador padronizar seu tipo.&x
parascanf()
. Corrigido agora; obrigado.Hássio , 38 bytes
fonte
Shadertoy GLSL Som Shader, 86
"Entrada" é fornecida via
#define
. Emite uma onda senoidal com frequência aproximada deF
Hz. Arredondado 2 * Pi para 6,3, em vez de "padrão" 6,2831, mas parece praticamente o mesmo.Infelizmente não há muito para jogar aqui.
fonte
Jolf, 4 bytes, não-competitivo
Essa adição de idioma veio após o desafio.
A onda padrão é uma onda senoidal.
fonte
SmileBASIC, 84 bytes
Converte de Hz para meio passo e toca uma certa nota com o valor a desafinar para produzir a frequência.
fonte