Ваша задача - создать программу, которая будет имитировать Биг Бен (Twitter) .
задача
Каждый раз, когда начинается новый час (по местному времени вашего компьютера или по Гринвичу), вы должны выводить BONG
повторяющиеся значения hour
времени (с пробелом между словами). Например, когда 3 часа, вы должны вывести BONG BONG BONG
. Формат времени соответствует 12-часовому формату времени, то есть после 12 часов у нас будет 1, а не 13. Программа / функция должна работать вечно.
Пример:
не выводить вещи в скобках
(start: 00:34 for example)
BONG (01:00)
BONG BONG (02:00)
(...)
BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG (12:00)
BONG (01:00 again)
(...)
(it continues forever)
правила
- Каждая серия
BONG
s должна быть отделена новой строкой - Лидирующие / завершающие новые строки разрешены
- Однако ведущие / конечные пробелы являются не допускаются
- Представление должно работать вечно
- Ваш вывод может быть напечатан ± 3 секунды с начала часа
- Вы не можете предполагать, что программа будет запущена в определенный час
Это код-гольф , поэтому выигрывает программа с самым коротким байтом!
code-golf
string
kolmogorov-complexity
date
Kritixi Lithos
источник
источник
TIMESKEW="60 1"
заставляет минуты течь как секунды.Ответы:
05AB1E , 43 байта
Попробуйте онлайн! (Но это не сработает, время ожидания истечет через 60 секунд. Для этого загрузите интерпретатор 05AB1E )
Объяснение:
Это заняло у меня некоторое время в гольф! Я мог бы играть в гольф немного больше, но это бьет
*><>
, так что это круто :)Быстрая версия:
Будем ждать одну секунду на старте и одну секунду между УДАРАМИ
источник
Bash,
71,7069 байтправок:
Golfed
Разъяснения
Тестовая версия
Работает с минутами вместо часов
источник
yes BONG|sed 12q
*> <> ,
484744 байтаПопробуй это здесь! ( или эта версия, которая делает это каждую минуту для тестирования )
Это выводит число
BONG
s, разделенных пробелами, в зависимости от того, какой час (а 13 - 1 и т. Д.). После финала нет пробелаBONG
, и есть перевод строки.Технически это не вечно (но в основном так и есть). Он пропускает ~ 28 байт в день (игнорируя издержки интерпретатора ...). Для утечки 1 ГБ потребуется ~ 105062 года.
Приближенный к накладным расходам интерпретатора, стек - просто часть
float64
s на интерпретаторе Golang. Так что я просто сделал,28*8
чтобы получить 224 байта в день. Я разделил это число на число байтов в гибибайте (1073741824), а затем на 365, чтобы приблизиться к тому, что утечка 1 ГиБ займет 13132,85 года.Примечание о переводчиках
Онлайн переводчик в Javascript. Страница должна быть открыта и видима, чтобы она могла проверить текущее время и вывести BONG. У толкователя Голанга такого ограничения нет.
объяснение
источник
JavaScript (ES6),
9993 байтаЭто использует время UTC (которое совпадает с фактической вещью). Из-за непроверяемой природы кода, вы можете попробовать следующее, что делает то же самое, но каждые 60 секунд:
Вот бонусная 99-байтовая версия, которая использует местное время:
источник
alert
для меня каждую минуту (но числоBONG
s правильное), но программа должна выводить только каждый часJavaScript (ES6),
125123117115 байтСпасибо @ Flp.Tkc за сохранение 5 байтов!
Спасибо @BenAston за сохранение еще 2 байтов!
Закуска
источник
Пакет, 142 байта
Поскольку файл работает как бесконечный цикл, я начинаю с задержкой в 1 с, так как в любом случае он мне нужен после бонгов, и это экономит циклы процессора.
>nul
Тщательно позиционируются , чтобы сохранить байты (1>nul
вызовет 1 будет съедено перенаправлением). Затем мы повторяем цикл, пока минуты и секунды не станут равны нулю. Бонги создаются путем взятия отрицательного часа по модулю 12 и запроса последнихh
символов из строки из 12 символов. Когдаh
ноль, это фактически дает нам всю строку, поэтому 12 бонгов. Затем достаточно заменить символы словомBONG
. При запуске это выглядит примерно так (обратите внимание, что изображение не зацикливается, поэтому вам потребуется принудительная перезагрузка, чтобы снова увидеть анимацию):источник
Bash + Linux crontab, 90
Я надеялся, что это будет короче, чем другие ответы оболочки. Тем не менее, я думаю, что это интересный подход:
Сценарий запускается один раз, заполняет crontab, затем завершается. Однако вывод cronjobs отправляется на терминал, с которого был запущен скрипт. Я думаю, что это удовлетворяет представление должно выполняться навсегда требование.
Предупреждение - это удалит все существующие записи в crontab, поэтому убедитесь, что у вас есть существующие резервные копии.
Это работает в Ubuntu 16.04, которая по умолчанию использует Vixie
cron
.источник
BONG
чем необходимо.cron
вы используете?/proc/<PID>/fd/<N>
.Рубин,
11299 байтСтарая версия
Спасибо QPaysTaxes за советы
источник
sleep(60)
что это произойдетЧеддер v1.0.5, 162 байта
У Чеддера нет встроенного считывателя времени / выходного сигнала cmd, поэтому мне пришлось импровизировать!
Golfed:
Ungolfed:
Объяснение:
Из-за ограниченной стандартной библиотеки Чеддера мне пришлось использовать cmd для генерации времени. Я сделал это, сохранив вывод «time / t», который печатает время в 12-часовом формате, в файл с именем «c». IO.read возвращает буфер, который я преобразовал в строку и разделил на «:», который гарантировал, что час всегда находится в нулевом индексе. Я сохранил всю эту операцию в лямбда-выражении, которое сэкономило мне 44 байта. После этой точки он переходит к логике «если сохраненный час не равен текущему часу, установите предыдущий час на текущий и выведите BONG n раз, обрежьте завершающий пробел».
Чеддер не может быть наименее многословным языком, но может быть забавно найти обходные пути как это!
К сожалению, это решение только для Windows.
Редактировать 1: Сохранены два байта, заменив «0 <1» в условии for на «1». Я не ожидал, что 1 оценивается как true в этом языке!
источник
Рубин,
8281 байтКаждую секунду мы проверяем, является ли это последней секундой часа, и BONG соответственно. Возможно, дальше можно было бы сыграть в гольф с некоторыми грязными трюками, но я не знаю слишком многих. Также это работает иначе, чем другой ответ Ruby.
Один байт сохранен благодаря любезности QPaysTaxes.
источник
if
?puts
забыл об этом.Python 2 ,
105106 байтредактировать
Добавил один байт, изменив <на! = После обратной связи от @ pinkfloydx33. Хорошее место
Протестировано как можно больше локально, но не работает на TIO, поскольку (очевидно) превышает 60-секундный предел выполнения. Пожалуйста, не стесняйтесь тестировать на месте :-)
Кстати, потеря этого надоедливого конечного пространства стоила мне 7 байт, иначе это было бы меньше 100.
При отсутствии TIO здесь выводится через час ожидания. Prog была запущена в 15:27 с дополнительным отладочным кодом, чтобы показать время печати (12-часовой формат).
Довольно просто, но вот объяснение для всех, кто заинтересован.
источник
11>0
, такh>c
или я что-то упустил?Python 3 -
1009792 байтаОбъяснение:
источник
from time import*<NL>while 1:x=3600;sleep(x-time()%x);print(('BONG '*int(strftime("%I")))[:-1])
составляет 93 байтаfrom time import*
, как этоC 238 байт
Я не уверен, что это работает правильно, и я мобильн, и мой телефон не имеет компилятора C. (Работает только на UNIX-подобных системах)
источник
f
вместоmain
? Как это должно работать?ш, 66 байт
Разъяснения
источник
%I
на%M
и это работает в течение нескольких минут.C 198 байтов
источник
Javascript ES6 87 байт
Редактировать: беззастенчиво заимствованный
new Date/36e5%12|0||12
код @ETHProductions, чтобы сохранить 6 байтовисточник
R
104 104байтаКаждую секунду он будет (должен) проверять, находимся ли мы в конце часа, а затем печатать это количество
BONG
s.источник
12:00:01
?Sys.sleep(60)
это произойдетwhile(1)
наrepeat
.BONG
течение 1 секунды, а не только один раз. Это необходимо для проверки только один раз в секунду.JavaScript ES2015,
1009998969488 байтОбъяснение:
h
это функция, которая получает 12-часовой рабочий день, используя оператор остатка (%12
).36e5
количество миллисекунд в часе, использующее экспоненциальный синтаксис для сохранения символов.new
Оператор не требует , что круглые скобки используются с функциями , если нет аргументов, поэтомуnew Date
. JavaScript имеет только арифметику с плавающей запятой,|
побитовый оператор ИЛИ заставляет число быть целым числом, потому что побитовые операторы JS работают с целочисленным подмножеством чисел, представленных IEEE 754 с плавающей запятой.Запятая обозначает подвыражения.
p
инициализируется на текущий час (p=h()
).for(;;)
используется для повторной проверкиBONG
необходимости оповещения о любых s. Проверка выполняется настолько быстро, насколько позволяет время выполнения.Если час изменился (
h()!=p
), то мы обновляем p и затем предупреждаемBONG
s. Логический оператор AND используется в качестве защитного устройства (если он замыкает накороткоh()===p
), чтобы определитьBONG
, выводятся ли s.String.prototype.repeat
является новым в ES2015 и сохраняет некоторые символы, используя что-то вроде ES5Array.prototype.join
.h
возвращает ноль для точных кратных 12 (т. е. 12:00, 12:00), поэтому мы изменяем его на 12, используя логическое ИЛИp||12
.Благодаря Kritixi Lithos и ETHProductions за идеи.
источник
Excel VBA, 143 байта
Кодовые выходы в окно VBE Immediates
Веселая версия, 143 байта (неконкурентная)
Хотя было бы довольно трудно получить Excel, чтобы получить БОНГ, довольно просто получить Excel, чтобы пойти
Beep
.Beep
Вызова производит звуковой сигнал, и этот код использует это , чтобы произвести сигналы , обозначающего час, на час, разделенный паузами 1 секунду.Как и выше, этот код заставляет Excel перестать отвечать на запросы, и рекомендуется добавить
:DoEvents
вызов в конец первой строки, поскольку это улучшает взаимодействие с пользователем, однако это не является необходимым для правильного выполнения кода.Безголовая версия
источник
Beep
илиDoEvents
вызовы не работают должным образом на компьютерах Mac.C # 234 байта
Я не планирую выигрывать здесь призы, но реализация C # обязательна.
Разоблаченный с комментариями:
источник
for(;;)
, изменениеh=()=>1+(DateTime.Now.Hour-1)%12;
(обратите внимание , никаких пробелов либо) , а затем Enumerable.Repeat становится("BONG",t)
(экономит два или три) , то избавиться от лишнего пробельных символов т.е.if(...)
Также обратите внимание это будет печатать все затяжки конкатенации , вероятно , принять эти сбережения байтовых превратить CONCAT в присоединиться с пробелом в качестве первого аргумента.Groovy, 72 байта
Как?
Сохраните метод, чтобы получить текущие часы.
Хранить начальные часы.
При значении true, если текущий час не равен предыдущему часу, выведите текущий час, умноженный на «BONG», для вывода текущего часа бонгов.
+3 байта
%12
для невоенных бонгов.источник
Perl, 60 байт
Обновить
Заменено
" "
с$"
, удаленоCORE::
, скорректированным колом.Гольф
Это должно быть запущено с
perl -E
.замечания
x while y
эквивалентноwhile(y){x}
(гдеx
это одно утверждение), но не нуждается в скобках.sleep
выполняется в первый раз, прежде чем что-либо напечатано.time
использует UTC. Оригинальный Биг Бен в летнее время (British Summer Time, BST) с конца марта до конца октября.sleep
возвращает количество секунд ожидания. Это всегда будет правдой.источник
-E
флаг равен +1 байт (где-то есть страница об измерении флагов ...). 2 , я не уверен, как запустить это, какperl -E golf.pl
кажется, немедленно прекратить.QBIC , 82 байта
Действительно нужно изменить токен для литералов кода (
$
) и реализовать функцию подстроки (left$(x,y)
может быть короче).Внутренняя работа:
Обновление (NC):
$
больше не используется в наборе команд QBIC, поэтому теперь его можно свободно использовать в качестве кода для QBasic без необходимости использования литералов кода. В этом случае он экономит 4 байта, в результате чего QBIC достигает 78 байтов:источник
SmileBASIC,
7467 байтВыводит большое количество «трейлинг» разрывов строк;)
Редактировать: сохранено 7 байтов с лучшим 24-> 12-часовым алгоритмом.
источник
PHP, 63 байта
Я мог бы сохранить еще два байта с расширенным ASCII. Но я в настоящее время слишком ленив для этого.
печатает BONG с лидирующим переводом строки точно в полный час. Беги с
-nr
.источник
-n
является своего рода неявным (игнорировать php.and вернуться к значениям конфигурации по умолчанию);-r
говорит PHP запускать код из параметра командной строки, а не из файла.С, 152
Удобочитаемый:
источник