Este es un desafío bastante simple, pero no pude encontrar ninguna pregunta que fuera realmente similar. El desafío es tomar una frecuencia al usar STDIN o un equivalente, y luego emitir un tono que coincida con esa frecuencia, en Hz, durante 5 segundos. Por ejemplo
Input: 400
Output: (a tone of 400 Hz with a duration of 5 seconds)
Reglas
- La entrada debe ingresarse a través de STDIN, o el equivalente de su idioma
- La respuesta debe ser un programa completo.
- Se pueden usar builtins
- La frecuencia será de 50 a 5000 Hz.
- La salida debe reproducirse durante 5 segundos.
- La salida debe tener la forma de una onda sinusoidal.
Casos de prueba
Entrada: 440
Salida:
Entrada: 200
Salida:
Entrada: 4000
Salida:
No se trata de encontrar el idioma con la solución más corta para esto (hay algunos en los que el programa vacío hace el truco), se trata de encontrar la solución más corta en cada idioma. Por lo tanto, ninguna respuesta se marcará como aceptada.
A diferencia de nuestras reglas habituales, siéntase libre de usar un idioma (o versión de idioma) incluso si es más nuevo que este desafío. Los idiomas específicamente escritos para enviar una respuesta de 0 bytes a este desafío son juegos justos pero no particularmente interesantes.
Tenga en cuenta que debe haber un intérprete para que se pueda probar el envío. Está permitido (e incluso alentado) escribir este intérprete usted mismo para un lenguaje previamente no implementado.
También tenga en cuenta que los idiomas deben cumplir nuestros criterios habituales para los lenguajes de programación .
Catalogar
El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](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()
función. ¿Se garantiza que es una onda sinusoidal?System.Console.Beep
es una onda sinusoidal en mi máquina (moderna, Windows 10), así que creo que eso cuenta. Las soluciones en PPCG generalmente no necesitan ser portátiles.Respuestas:
QBasic,
18 bytes(descalificado)Como mencionó @pabouk, esto usa el altavoz de la PC, por lo que reproduce una onda cuadrada , no una onda sinusoidal como el problema pregunta. (Este requisito se agregó al problema después de que se publicó esta respuesta, de ahí los votos). Lo dejaré aquí para la posteridad de todos modos.
Reproduzca un sonido a la frecuencia introducida durante 91 ticks, que es igual a 5 segundos.
fuente
SOUND
El comando utiliza el altavoz de la PC que, según lo diseñado, fue impulsado por un chip temporizador 8254 que produce una onda cuadrada. --- Aunque en las PC modernas 8254 podría faltar, la emulación correcta delSOUND
comando debería producir una onda cuadrada.Python2, 40 bytes
Solo funciona en Windows.
fuente
5e3
?Mathematica, 42 bytes
Bueno, si podemos usar incorporados ...
Gracias al requisito de un programa completo, esta fue la primera vez que utilicé mi punta de golf descubierta recientemente
%
(resultado de la última evaluación) para guardar dos bytes.Mathematica también tiene una función incorporada
Sound
que toma un tono y una duración como argumentos, pero desafortunadamente el tono tiene que ser dado como una nota musical. Especificar su propia onda de sonido a travésPlay
parece ser la única forma de trabajar con una frecuencia.fuente
C #, 80 bytes
fuente
Beep
ing en Java?MATLAB, 36 bytes
Gracias a flawr por guardar dos bytes.
fuente
2^-12
lugar de1/4096
.8^-4
es aún más corto!PowerShell, 32 bytes
fuente
FakeASM , 12 bytes
Funciona con la implementación de referencia de Windows (descarga) . Llama a la
Beep
función de Windows , que es una onda sinusoidal en las plataformas modernas.fuente
RDA
lee un número de STDIN y lo coloca en el registroA
.Bash + X11,
2720 bytesEste contiene un no imprimible, así que aquí hay un hexdump:
Esto toma la frecuencia como un argumento de línea de comando y reproduce el pitido apropiado a un volumen del 9% (ya que no se especificó ningún volumen).
(Nota: no pude probar esto debido a algunos problemas con mi computadora, pero estoy 99% seguro de que funciona).
fuente
echo <BEL>
donde<BEL>
está el carácter real, guarda 6 bytes.JavaScript, 114 bytes
Requiere un navegador de vanguardia, ingrese la frecuencia en el indicador. JSFiddle
fuente
prompt()
se llama después de que se inicia el temporizador de audionew AudioContext()
. Creo que lo más corto que puedes obtener es 115 bytesc=new AudioContext(p=prompt());with(c.createOscillator()){frequency.value=p;connect(c.destination);start();stop(5)}
.<script>
etiquetas como necesarias para que JavaScript se considere un programa completo antes. Creo que eres bueno para el 114. Además, eliminar lap
asignación y solo establecerlofrequency.value=prompt()
debería llevarte a 110.p=prompt();with(new AudioContext)with(createOscillator())frequency.value=p,connect(destination),start(),stop(5)
esto ahorra 3 bytesBash + utilidades de Linux, 95
Esta es una verdadera onda sinusoidal. No hay pitidos. Frecuencia de entrada ingresada a través de la línea de comando:
fuente
Procesamiento,
148114106 bytes(Por alguna razón, el procesamiento requiere el uso de la declaración de importación y la nueva línea; de lo contrario, no reconoce la biblioteca).
Todavía no he descubierto cómo pasar argumentos al procesamiento, aunque sé que es posible, por lo que este código requiere tener un archivo llamado "s" en la carpeta de croquis que tiene el valor de frecuencia. Si puedo descubrir cómo pasar argumentos, podría reemplazar la carga de archivos con
args[0]
.fuente
VB.net,
90 bytes, 74 bytesGracias a Sehnsucht.
Esta es mi primera publicación, así que si hice algo mal, hágamelo saberfuente
Main(a()As String
yBeep(a(0),5000)
reduciendo el total a 74 bytes de acuerdo con el contador de bytesTurbo / Borland / Free / GNU Pascal, 95 bytes
Debido a problemas con la función de retraso en las computadoras modernas (bueno, algo más rápido que 200Mhz) que intenta ejecutar Turbo / Borland pascal, esto podría no esperar 5 segundos, incluso con una biblioteca CRT parcheada
La conversión de Cadena a Entero se puede hacer más corta (77 bytes) en FreePascal y derivados modernos, ya que tienen la
StrToInt
función:fuente
Program a;
parte, por lo que puede ganar 10 bytes omitiéndolo.ParamStr()
y soloRead()
según sea necesario: pastebin.com/1Tw2d0D6Perl, 27 bytes
Básicamente, una versión de Perl de la respuesta de Python (también solo funciona en Windows), si permitimos módulos.
fuente
Vitsy + X11, 20 bytes
Una traducción de mi respuesta bash. No funciona en el intérprete en línea (obviamente).
Toma la entrada como cualquier carácter no numérico seguido de la frecuencia (por lo que para una entrada de 440 Hz puede hacer "a440").
Explicación
fuente
C con WinAPI, 82 bytes
Utiliza la función WinAPI Beep ().
fuente
&x
ascanf
? También puede declararx
como parámetro a main y dejar que el compilador predetermine su tipo.&x
ascanf()
. Arreglado ahora; Gracias.Hassium , 38 Bytes
fuente
Shadertoy GLSL Sound Shader, 86
"Entrada" se da a través de
#define
. Emite una onda sinusoidal con una frecuencia aproximada deF
Hz. Redondeado 2 * Pi a 6.3, en lugar de "predeterminado" 6.2831, pero suena más o menos igual.Lamentablemente, no hay mucho para jugar golf aquí.
fuente
Jolf, 4 bytes, sin competencia
Esta adición de lenguaje vino después del desafío.
La onda predeterminada es una onda sinusoidal.
fuente
SmileBASIC, 84 bytes
Convierte de Hz a medios pasos, y toca una cierta nota con el valor de desafinación para producir la frecuencia.
fuente