C'est un défi assez simple, mais je n'ai trouvé aucune question qui lui soit vraiment similaire. Le défi consiste à prendre une fréquence en utilisant STDIN ou un équivalent, puis à émettre une tonalité qui correspond à cette fréquence, en Hz, pendant 5 secondes. Par exemple
Input: 400
Output: (a tone of 400 Hz with a duration of 5 seconds)
Règles
- La saisie doit être effectuée via STDIN ou l'équivalent de votre langue
- La réponse doit être un programme complet
- Les Builtins peuvent être utilisés
- La fréquence sera comprise entre 50 et 5000 Hz
- La sortie doit être lue pendant 5 secondes
- La sortie doit être sous la forme d'une onde sinusoïdale
Cas de test
Contribution: 440
Sortie:
Contribution: 200
Sortie:
Contribution: 4000
Sortie:
Il ne s'agit pas de trouver la langue avec la solution la plus courte pour cela (il y en a où le programme vide fait l'affaire) - il s'agit de trouver la solution la plus courte dans chaque langue. Par conséquent, aucune réponse ne sera marquée comme acceptée.
Contrairement à nos règles habituelles, n'hésitez pas à utiliser une langue (ou une version linguistique) même si elle est plus récente que ce défi. Les langues spécifiquement écrites pour soumettre une réponse de 0 octet à ce défi sont équitables mais pas particulièrement intéressantes.
Notez qu'il doit y avoir un interprète pour que la soumission puisse être testée. Il est permis (et même encouragé) d'écrire cet interprète vous-même pour une langue non implémentée auparavant.
Notez également que les langues ne doivent fullfil nos critères habituels pour les langages de programmation .
Catalogue
L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) en tant que liste des solutions les plus courtes par langue et b) en tant que classement général.
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](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()
fonction. Est-il garanti qu'il s'agit d'une onde sinusoïdale?System.Console.Beep
truc de Windows est une onde sinusoïdale sur ma machine (moderne, Windows 10), donc je pense que ça compte. Les solutions sur PPCG n'ont généralement pas besoin d'être portables.Réponses:
QBasic,
18 octets(disqualifié)Comme @pabouk l'a mentionné, cela utilise le haut-parleur du PC, donc il joue une onde carrée , pas une onde sinusoïdale comme le problème le demande. (Cette exigence a été ajoutée au problème après la publication de cette réponse, d'où les votes.) Je vais quand même le laisser ici pour la postérité.
Jouez un son à la fréquence entrée pendant 91 ticks, ce qui équivaut à 5 secondes.
la source
SOUND
La commande utilise le haut-parleur PC qui, tel que conçu, était piloté par une puce de minuterie 8254 qui produit une onde carrée. --- Bien que dans les PC modernes 8254 puisse manquer, l'émulation correcte de laSOUND
commande devrait produire une onde carrée.Python2, 40 octets
Fonctionne uniquement sous Windows.
la source
5e3
marcherait?Mathematica, 42 octets
Eh bien, si nous pouvons utiliser des modules intégrés ...
Grâce à l'exigence d'un programme complet, c'était la première fois que j'utilisais mon astuce de golf récemment découverte
%
(résultat de la dernière évaluation) pour économiser deux octets.Mathematica a également un intégré
Sound
qui prend un pitch et une durée comme arguments, mais malheureusement le pitch doit être donné comme une note de musique. La spécification de votre propre onde sonore viaPlay
semble être la seule façon de travailler avec une fréquence.la source
C #, 80 octets
la source
Beep
ing en Java?MATLAB, 36 octets
Merci à flawr avoir économisé deux octets.
la source
2^-12
au lieu de1/4096
.8^-4
c'est encore plus court!PowerShell, 32 octets
la source
FakeASM , 12 octets
Fonctionne avec l'implémentation de référence Windows (téléchargement) . Il appelle la
Beep
fonction Windows , qui est une onde sinusoïdale sur les plates-formes modernes.la source
RDA
lit un nombre dans STDIN et le met en registreA
.Bash + X11,
2720 octetsCelui-ci contient un fichier non imprimable, voici donc un hexdump:
Cela prend la fréquence comme argument de ligne de commande et émet le bip approprié à un volume de 9% (car aucun volume n'a été spécifié).
(Remarque: je n'ai pas pu tester cela en raison de certains problèmes avec mon ordinateur, mais je suis sûr à 99% que cela fonctionne.)
la source
echo <BEL>
où<BEL>
est le caractère réel, enregistre 6 octets.JavaScript, 114 octets
Nécessite un navigateur un peu avant-gardiste, entrez la fréquence dans l'invite. JSFiddle
la source
prompt()
est appelé après le démarrage de la minuterie audionew AudioContext()
. Je crois que le plus court que vous pouvez obtenir est de 115 octetsc=new AudioContext(p=prompt());with(c.createOscillator()){frequency.value=p;connect(c.destination);start();stop(5)}
.<script>
balises comme étant requises pour que JavaScript considère un programme complet auparavant. Je pense que vous êtes bon pour le 114. En outre, la suppression de l'p
affectation et le simple réglagefrequency.value=prompt()
devraient vous ramener à 110.p=prompt();with(new AudioContext)with(createOscillator())frequency.value=p,connect(destination),start(),stop(5)
cela économise 3 octetsUtilitaires Bash + Linux, 95
Il s'agit d'une véritable onde sinusoïdale. Aucun bip. Fréquence d'entrée saisie via la ligne de commande:
la source
Traitement,
148114106 106 octets(Pour une raison quelconque, le traitement nécessite à la fois l'utilisation de l'instruction d'importation et la nouvelle ligne, sinon il ne reconnaît pas la bibliothèque.)
Je n'ai toujours pas compris comment passer des arguments dans Processing, bien que je sache que c'est possible, donc ce code nécessite d'avoir un fichier appelé "s" dans le dossier d'esquisse qui a la valeur de fréquence. Si je peux comprendre comment passer des arguments, je pourrais remplacer le chargement de fichiers par
args[0]
.la source
VB.net,
90 octets, 74 octetsMerci à Sehnsucht
Ceci est mon premier message, donc si j'ai fait quelque chose de mal, faites le moi savoirla source
Main(a()As String
et enBeep(a(0),5000)
réduisant le total à 74 octets selon le compteur d'octetsTurbo / Borland / Free / GNU Pascal, 95 octets
En raison de problèmes avec la fonction de retard sur les ordinateurs modernes (enfin, quelque chose de plus rapide que 200Mhz) essayant d'exécuter Turbo / Borland pascal, cela peut ne pas attendre 5 secondes, même avec une bibliothèque CRT corrigée
La conversion de chaîne en nombre entier peut être effectuée plus court (77 octets) sur FreePascal et les dérivés modernes, car ils ont la
StrToInt
fonction:la source
Program a;
partie, vous pouvez donc gagner 10 octets en l'omettant.ParamStr()
et justeRead()
comme requis: pastebin.com/1Tw2d0D6Perl, 27 octets
Fondamentalement, une version Perl de la réponse Python (ne fonctionne également que sous Windows), si nous autorisons les modules.
la source
Vitsy + X11, 20 octets
Une traduction de ma réponse bash. Ne fonctionne pas dans l'interprète en ligne (évidemment).
Prend l'entrée comme n'importe quel caractère non numérique suivi de la fréquence (donc pour une entrée de 440 Hz, vous pouvez faire "a440").
Explication
la source
C avec WinAPI, 82 octets
Utilise la fonction WinAPI Beep ().
la source
&x
àscanf
? Vous pouvez également déclarerx
comme paramètre à main et laisser le compilateur par défaut son type.&x
àscanf()
. Fixé maintenant; Merci.Hassium , 38 octets
la source
Shadertoy GLSL Sound Shader, 86
"Input" est donné via
#define
. Émet une onde sinusoïdale avec une fréquence approximative deF
Hz. Arrondi 2 * Pi à 6,3, au lieu de "par défaut" 6.2831, mais sonne à peu près la même chose.Malheureusement, il n'y a pas grand-chose à jouer au golf ici.
la source
Jolf, 4 octets, sans concurrence
Cet ajout de langue est venu après le défi.
L'onde par défaut est une onde sinusoïdale.
la source
SmileBASIC, 84 octets
Convertit de Hz en demi-pas et joue la certaine note avec la valeur de désaccord pour produire la fréquence.
la source