Введение
Несколько дней назад мне был нужен метроном для чего-то. У меня не было ни одного доступного, поэтому я скачал приложение из App Store. Приложение имело размер 71 МБ !!!
71 МБ для изготовления тик-ток ...?!
Так что мне пришла в голову код-гольф, и мне было интересно, могут ли некоторые из вас это улучшить.
Вызов
Гольф какой-то код, который выводит звук. Это довольно неважно, что за звук. Если необходимо, создайте какой-нибудь звуковой файл ... но системный звуковой сигнал также сделает эту работу. ( Вот какой-то звук, который я создал ... ничего особенного. )
Вход : количество ударов в минуту на выходе метронома.
пример
Это Java-версия без игры в гольф! Это просто, чтобы показать вам задачу.
public class Metronome {
public static void main(String[] args) throws InterruptedException {
int bpm = Integer.valueOf(args[0]);
int interval = 60000 / bpm;
while(true) {
java.awt.Toolkit.getDefaultToolkit().beep();
// or start playing the sound
Thread.sleep(interval);
System.out.println("Beep!");
}
}
}
правила
Вы не можете использовать внешние библиотеки, разрешены только инструменты самого языка.
Только байты подсчета исходного кода ... не звуковой файл.
Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
РЕДАКТИРОВАТЬ:
Пример вывода: что-то вроде этого будет выводом для 120 бит / с : ссылка
beep()
и вывод на консоль не совсем мгновенный IIRC. Никтоsleep()
не известен как точный.Ответы:
Mathematica, 26 байтов
Do
обычно используется как цикл for в самом узком смысле: повторяйте этот фрагмент кода для каждогоi
отx
доy
... или даже просто повторяйте этот фрагмент кодаn
раз. Вместо числаn
мы можем задать ему бесконечность, хотя и создать бесконечный цикл. Тело цикла -Pause[Beep[];60/#]
это простой способ записать,Beep[];Pause[60/#]
где#
аргумент функции.Если для решения допустимо в конечном итоге взорвать стек вызовов, мы можем сохранить один байт с рекурсивным решением:
источник
~Do~∞
это возможно.For
Петля только у меня до 29 байт. (Кроме того, я лично считаю, что 26-байтовая версия является единственной верной.)~Do~∞
не работает, когда∞
приходит из переменной. (Я пытался использовать это, когда играю в гольф на вашей машине правды.)Attributes[Do]
включает в себяHoldAll
, так что я думаю, что_~Do~∞
имеет специальный шаблон оценки.Do[...,a]
гдеa
содержит бесконечность фактически показывает вызов какDo[...,{a}]
.Pyth,
11109 байтСпасибо Аднану за напоминание
#
.Навсегда (
#
), напечатайтеC
хар-код7
. Затем sleep (.d
)60
секунд, разделенных на (c
) input (Q
).источник
7.
будет проанализирован как число.#pythnoob
JavaScript,
36 45 42 4134 байтаСохранено 1 байт благодаря @RikerW
Сохранено 1 байт благодаря @ETHproductions
Это функция.
Если я использую
`\7`
, SpiderMonkey жалуется, что восьмеричные литералы устарели.Альтернатива, 31 байт
Проблема в том, что непечатные надписи удалены, но это должно сработать.
источник
Баш,
535541 байтСпасибо @Dennis за бритье 14 байтов 1
Хорошо, время истины: я ужасен в игре в гольф. Любая помощь будет очень признательна.
1 Святое дерьмо. Неудивительно, что никто не может переиграть Денниса.
источник
while 1
Возможно ли ?while printf \\a
возможно?bc
.read
. 3.echo
существует с кодом 0, так что вы можете использовать это утверждение вместоtrue
.JavaScript ES6 (браузер), 43 байта
Это может растягивать правила:
Дайте этой функции имя (например
F=x=>...
) и введите его в консоли браузера на этой странице . Затем вызовите функцию с помощью вашего bps, напримерF(60)
, и подождите, пока не произойдет волшебство. :-)Почему это работает? Ну,
b.html
находится в той же папке, что и файл с именем1
, который является образцом звукового файла из OP. Я не уверен, что это в правилах (я думаю, что это похоже на версию оболочки; ее нужно запускать в определенной среде), но это стоило того.Более безопасная версия, 57 байт
Если приведенный выше код не разрешен по какой-либо причине, попробуйте вместо этого:
Работает на любой странице!
источник
05AB1E , 31 байт
Код:
Если бы у меня была встроенная функция ожидания N секунд, это могло бы быть 11 байтов. К сожалению, это не случай. Вот объяснение:
Использует кодировку ISO 8859-1.
источник
time.sleep
и.pop()
в середине этого кода. ;)osascript, 39 байт
Есть буквально команда под названием beep? Sweeeet!
Запускается только на Mac OS X из-за ограниченной лицензии, но для запуска выполните:
источник
Python,
686757 байтСохранено 1 байт благодаря @FlagAsSpam
Сохранено 9 байтов благодаря @Adnan
Также потребовалось на 2 байта меньше после преобразования концов строк в формат UNIX.
Старая версия, которая фактически принимает bpm в качестве аргумента командной строки (66 байт):
источник
print"\7";
? Я не уверен, но я уверен, что это работает.a=input()
иa
заменыint(sys.argv[1])
? Я всегда думал, что Python 2 автоматически оценивает ввод и поэтому не нуждается в преобразовании int, но я могу ошибаться.input()
самом деле делает автоматическую оценку. Я забыл об этой функции. Это довольно не пифонично, хотя - вероятно, наследие от старых времен.time.sleep(60./a)
заменитьtime.sleep(60./input())
, полностью удаливa=input()
?AutoIt , 56 байт
источник
Витси, 14 байтов
Подробный режим (скоро появится переводчик):
В основном, я использую
w
оператор, чтобы ждать определенное количество секунд, как указаноbpm/60
, завернутый в бесконечный цикл. Затем я шуметь с выводом терминала ASCII символа 7 (BEL
).источник
java -jar Vitsy.jar <filename>
.C #, 118 байт
Основное решение.
источник
System.Console.Beep();
, а печать использует символSystem.Console.Write('<\a character>');
.Java,
10382 байтаСпасибо @Justin за то, что он сбрил 21 байт!
О Боже.
Метод и версия игры в гольф.
источник
System.out.print('\7');
вместоjava.awt.Toolkit.getDefaultToolkit().beep();
?'\7'
является символом колокола, который издает звук при распечаткеМашинный код GMC-4 , 21,5 байта
GMC-4 - это 4-битный компьютер компании Gakken, который обучает принципам языка ассемблера в упрощенном наборе инструкций и на компьютере. Эта процедура требует ввода в адресах памяти данных
0x5D
через0x5F
, в большом обратном порядке байт десятичного (то есть, одна цифры на клев).Алгоритм в основном добавляет ввод в память и ждет 0,1 с, пока он не достигнет 600, а затем вычитает 600 и издает звуковой сигнал в бесконечном цикле. Поскольку GMC-4 имеет множество функций обмена регистрами, но не имеет функций копирования регистров , это делается трудным путем.
В шестнадцатеричном формате (вторая строка - позиция в памяти):
В сборе:
Отказ от ответственности:
Я на самом деле не владею GMC-4. Я тщательно проверил эту программу с документацией из сети, но, возможно, я допустил ошибку. Я также не знаю порядка байтов. Похоже, что GMC-4 является байтовым порядком байтов, но я не уверен. Если кто-то владеет GMC-4 и сможет это проверить / подсказать порядковый номер GMC-4, я был бы очень признателен.
источник
C, 48 байтов
Решение только для Windows (функция Sleep (), если быть точным).
Я также (ab) использовал тот факт, что printf () возвращает количество напечатанных символов, чтобы использовать его в качестве условия бесконечного цикла.
В двойных кавычках в вызове printf () есть символ IS, но он почему-то здесь не отображается. Если вы сомневаетесь, скопируйте и вставьте в Sublime Text 2 или Notepad ++, символ будет отображаться как
BEL
.Это началось как решение C ++, но оно как бы попало в C-подмножество C ++ (потому что, вы знаете,
Sleep()
немного корочеstd::this_thread::sleep_for(std::chrono::milliseconds())
) иprintf()
корочеstd::cout<<
).источник
AppleScript 94 байта
Я знаю, что довольно поздно, и это мой первый пост здесь, но неважно.
Ungolfed:
источник
VBScript,
11366 байтЭта программа достаточно проста; он принимает ввод, повторяет символ BEL и ждет. Спасибо Нилу за то, что он сбрил почти половину программы!
источник
WScript.Echo CHR(7)
? Кроме того, вы имели в виду60000
?Рубин,
3733 байтаДовольно просто.
Это лямбда-функция. Если вы хотите 60 ударов в минуту, вы могли бы сделать:
m[60]
.источник
$><<?\a
также должно работать на звуковой сигнал. И не нужно , чтобы дать имя для прока (все решения JavaScript с содержанием жира функции стрелка также оставить его Unassigned), вы можете позвонить анонимно тоже:->b{loop{$><<?\a;sleep 6e1/b}}[60]
.?\a
; у вас есть Ruby 1.x? Если да, можете ли вы проверить, что это работает?Japt, 30 байт
?
Должен быть буквальным байт9A
. Проверьте это онлайн! (Извините за всплывающее окно, задерживающее первые несколько ударов; это будет скоро удалено.)Как это работает
источник
Свинка, 18 байт
Считайте BPM в переменную I, затем F {с двумя пробелами после} является бесконечным циклом. Остановитесь на 60 секунд / BPM, затем запишите $ CHR (7) {Ascii: BEL} в стандартный вывод, давая требуемый аудиовыход, затем перезапустите в бесконечном цикле.
источник
Java, 321 символ
Звучит очень хорошо. Работает только на системах с поддержкой MIDI.
,
источник
ChucK , 90 байт
Белый шум, который включается и выключается каждые два тика.
объяснение
Это сделано, чтобы включить звук в такт, а затем выключить его в такт.
9893-байтовая версия (любитель)Белый шум воспроизводится в течение 10 миллисекунд на такт.
Это сделано, чтобы быть щелчком вместо постоянного шума, включаемого и выключаемого.
источник
Perl 5, 36 байт
Подпрограмма; использовать его как
источник
sleep
в секундах, поэтому вы не можете издавать более 60 звуковых сигналов в минуту, не уверен, является ли это требованием. Кроме того, вы, вероятно, можете сохранить тот же счетчик байтов, но иметь полную программу, выполнив что-то вроде:$|=<>;{print"\a";sleep 60/$|;redo}
(не могу проверить это прямо сейчас).sleep
. Но это сработало для меня.Джольф, 7 байт, неконкурентный
Я добавил звуки после того, как был сделан этот прекрасный вызов.
Если вы хотите очистить этот звук, обратите внимание на вывод. Скажи, что это число
x
. Выполните еще одну команду Джольфа~CP"x"
, и интервал будет очищен.источник
Zsh , 32 байта
Основано на ответе ведущего bash, но
source
s вместоexec
s. Источники ссылок TIO$0:a
из-за того, как выполняется исходный файл, но он будет работать без него.Попробуйте онлайн!
источник
Bash + bc + > <> , 44 байта
Игра на том факте, что интерпретатор> <> позволяет вам определить время тика:
Код> <> является
7o
и должен выводить BELсимвол, производя системный звуковой сигнал. Он будет повторяться до тех пор, пока не будет прерван. Значение устанавливается в (2 / RPM) / 60 , так что весь код играют RPM * 60 раз в секунду.-t
источник
bc
установили? Похоже, что$(bc -l<<<"2/$1/60")
не производил никакого вывода. Я добавлю это в список языков ответа. Я еще не смог полностью проверить свой ответ, поэтому может быть и какая-то ошибка.SmileBASIC, 26 байтов
Он может играть на любом общем миди-инструменте, хотя все, что больше 9, будет использовать больше байтов.
источник
Stax, 17 байт
или без упаковки:
Программа выводит байты, которые при подаче через утилиту командной строки aplay с настройками по умолчанию производят шум метронома. Ввод используется в качестве ударов в минуту
пример:
Вы должны услышать ужасный звуковой сигнал при желаемом ударов в минуту
источник