Это довольно простой вызов, но я не смог найти ни одного вопроса, который был бы действительно похож на него. Задача состоит в том, чтобы взять частоту при использовании STDIN или ее эквивалента, а затем вывести тон, соответствующий этой частоте, в Гц, в течение 5 секунд. Например
Input: 400
Output: (a tone of 400 Hz with a duration of 5 seconds)
правила
- Входные данные должны быть приняты через STDIN или эквивалент вашего языка
- Ответ должен быть полной программой
- Встроенные могут быть использованы
- Частота будет где-то от 50 до 5000 Гц
- Выход должен быть воспроизведен в течение 5 секунд
- Выход должен быть в форме синусоиды
Контрольные примеры
Входные данные: 440
Выход:
Входные данные: 200
Выход:
Входные данные: 4000
Выход:
Речь идет не о поиске языка с кратчайшим решением для этого (есть такие, где пустая программа делает свое дело) - речь идет о поиске кратчайшего решения в каждом языке. Поэтому ни один ответ не будет помечен как принятый.
В отличие от наших обычных правил, не стесняйтесь использовать язык (или языковую версию), даже если он новее этой задачи. Языки, специально написанные для предоставления 0-байтового ответа на этот вызов, являются честной игрой, но не особенно интересными.
Обратите внимание, что должен быть переводчик, чтобы представление можно было проверить. Разрешается (и даже поощряется) самостоятельно писать этот переводчик для ранее не реализованного языка.
Также обратите внимание , что языки действительно должны в полной мере ощутить наши обычные критерии для языков программирования .
Каталог
Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](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()
функцию. Гарантируется ли это, что это синусоида?System.Console.Beep
- синусоида на моей (современной Windows 10) машине, так что я думаю, что это важно. Решения по PPCG обычно не должны быть переносимыми.Ответы:
QBasic,
18 байт(дисквалифицирован)Как упомянуто @pabouk, здесь используется динамик ПК, поэтому он воспроизводит прямоугольную волну, а не синусоидальную, как задает проблема. (Это требование было добавлено к проблеме после того, как этот ответ был опубликован, отсюда и голоса.) Я все равно оставлю это здесь для потомков.
Воспроизведите звук на введенной частоте в течение 91 такта, что равно 5 секундам.
источник
SOUND
Команда использует динамик ПК, который, как и было задумано, приводится в действие микросхемой таймера 8254, которая генерирует прямоугольную волну. --- Хотя в современных компьютерах 8254 может отсутствовать правильная эмуляция,SOUND
команда должна производить прямоугольную волну.Python2, 40 байт
Работает только на Windows.
источник
5e3
работать?Mathematica, 42 байта
Хорошо, если мы можем использовать встроенные модули ...
Благодаря требованию полной программы, я впервые использовал мой недавно обнаруженный совет по использованию в гольфе
%
(результат последней оценки), чтобы сэкономить два байта.Mathematica также имеет встроенную функцию,
Sound
которая принимает высоту и длительность в качестве аргументов, но, к сожалению, высоту следует указывать в качестве музыкальной ноты. Задание собственной звуковой волны с помощьюPlay
кажется единственным способом работы с частотой.источник
C #, 80 байт
источник
Beep
в Java?MATLAB, 36 байт
Спасибо flawr за сохранение двух байтов.
источник
2^-12
вместо1/4096
.8^-4
еще короче!PowerShell, 32 байта
источник
FakeASM , 12 байт
Работает с эталонной реализацией Windows (скачать) . Он вызывает
Beep
функцию Windows , которая является синусоидой на современных платформах.источник
RDA
читает число из STDIN и помещает его в регистрA
.Bash + X11,
2720 байтЭто содержит непечатаемый, поэтому вот hexdump:
Он принимает частоту в качестве аргумента командной строки и воспроизводит соответствующий звуковой сигнал с громкостью 9% (поскольку громкость не указана).
(Примечание: я не смог проверить это из-за некоторых проблем с моим компьютером, но я на 99% уверен, что это работает.)
источник
echo <BEL>
где<BEL>
фактический символ, сохраняет 6 байтов.JavaScript, 114 байт
Требуется несколько современных браузеров, введите частоту в строке. JSFiddle
источник
prompt()
вызывается после запуска таймера аудиоnew AudioContext()
. Я считаю, что самое короткое, что вы можете получить - это 115 байтc=new AudioContext(p=prompt());with(c.createOscillator()){frequency.value=p;connect(c.destination);start();stop(5)}
.<script>
теги необходимыми для того, чтобы JavaScript считался полной программой раньше. Я думаю, что вы хороши для 114. Кроме того, удалениеp
назначения и просто настройкаfrequency.value=prompt()
должны привести вас к 110.p=prompt();with(new AudioContext)with(createOscillator())frequency.value=p,connect(destination),start(),stop(5)
это экономит 3 байтаУтилиты Bash + Linux, 95
Это настоящая синусоида. Нет звуковых сигналов. Частота ввода, введенная через командную строку:
источник
Обработка,
148114106 байт(По какой-то причине для обработки требуется использовать оператор импорта и новую строку, в противном случае она не распознает библиотеку.)
Я до сих пор не выяснил, как передать аргументы в Processing, хотя я знаю, что это возможно, поэтому для этого кода требуется наличие файла с именем «s» в папке эскизов, который имеет значение частоты. Если бы я мог понять, как передать аргументы, я мог бы заменить загрузку файла
args[0]
.источник
VB.net,
90 байт, 74 байтаБлагодаря Sehnsucht
Это мой первый пост, так что если я что-то сделал не так, пожалуйста, дайте мне знатьисточник
Main(a()As String
иBeep(a(0),5000)
сократить общее количество до 74 байтов в соответствии с счетчиком байтовTurbo / Borland / Free / GNU Pascal, 95 байт
Из-за проблем с функцией задержки на современных компьютерах (ну, все, что быстрее 200 МГц), пытающихся запустить Turbo / Borland Pascal, это может не ждать 5 секунд, даже с исправленной библиотекой CRT
Преобразование строки в целое число может быть сделано короче (77 байт) на FreePascal и современных производных, так как они имеют
StrToInt
функцию:источник
Program a;
части, поэтому вы можете выиграть 10 байт, если ее опустить.ParamStr()
и просто поRead()
мере необходимости: pastebin.com/1Tw2d0D6Perl, 27 байт
В основном, версия Perl для Perthon (также работает только в Windows), если мы разрешаем модули.
источник
Витси + X11, 20 байт
Перевод моего bash ответа. Не работает в онлайн-переводчике (очевидно).
Принимает ввод как любой нечисловой символ, за которым следует частота (поэтому для входа 440 Гц вы можете сделать «a440»).
объяснение
источник
C WinAPI, 82 байта
Использует функцию WinAPI Beep ().
источник
&x
наscanf
? Также вы можете объявитьx
в качестве параметра main и позволить компилятору установить его тип по умолчанию.&x
наscanf()
. Исправлено сейчас; Спасибо.Калий , 38 байт
источник
Шадертой GLSL Sound Shader, 86
«Ввод» осуществляется через
#define
. Вывод синусоиды с приблизительной частотойF
Гц. Округлено 2 * Пи до 6,3, вместо «по умолчанию» 6,2831, но звучит почти так же.К сожалению, здесь не так много для гольфа.
источник
Джольф, 4 байта, неконкурентный
Это языковое дополнение появилось после испытания.
Волной по умолчанию является синусоида.
источник
SmileBASIC, 84 байта
Преобразует из Гц в полшага и воспроизводит определенную ноту со значением отстройки, чтобы получить частоту.
источник