Дарий!
В событиях, совершенно не связанных с тем, что, я надеюсь, произойдет со мной в ближайшие пару дней, я поручу вам написать код, который выполняет следующие действия:
Распечатать
Legen... wait for it...
немедленно, с завершающим переводом строки.
Подождите до следующего полного часа (когда запустится задание cron для награждения значком).
Распечатать
dary!
с дополнительным завершающим переводом строки.
Дополнительные правила
Вы можете написать программу или функцию, но вывод должен быть распечатан в STDOUT (или его ближайшую альтернативу вашему языку).
Вы должны ждать до следующего полного часа, а не только в течение 60 минут. Если код выполняется в 6:58, он должен напечатать вторую строку в 7:00.
Последняя строка должна быть напечатана не позднее, чем через одну секунду после следующего полного часа.
Если программа запускается в первую секунду целого часа, она должна ждать следующего полного часа.
Вы можете запросить местное или UTC время.
Применяются стандартные правила игры в гольф .
Ответы:
Пиф,
4241Ниже приведен шестнадцатеричный код:
Сохранено 1 байт благодаря @isaacg
Использует
.d
функцию для получения значений местного времени..d6
возвращает текущий час. Это печатает первую строку, затем ждет, пока час не будет отличаться от часа и начала программы, а затем печатает вторую строку.Вы можете попробовать это онлайн с
.d7
или.d8
за минуты / секунды, но онлайн-компилятор печатает только что-нибудь, когда программа завершается.Поздравляю, Деннис! :)
источник
0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
.
будет иметь такую же длину. Глупые ошибки: 1dary
, но нетlegen
! И Pyth утверждает, что его легче понять тем, кто привык к традиционному программированию ...."
Указывает , что строка должна иметь какие - то операции , выполняемые на нем , чтобы получить реальную строку. Это просто компрессионный трюк для игры в гольф. Если вы решили попробовать изучать Pyth, удачи! Не забывайте, что для этого тоже есть чат :)JavaScript (ES6), 74 байта
Возможно, вы захотите изменить системные часы перед тестированием, примите наши поздравления, если вы попали сюда на 59 минут раньше.
источник
36e5
работать на месте3.6e6
?setTimeout
быeval
для меня. Верно ... Я изначально пытался использовать,console.log
но это даже не работает, когда хранится в переменной из-за контекста. Вы тоже красивы!setTimeout
правильно использовать и даже сохранить один байт:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
CJam,
4948 байтовИспользует местное время. Для целей тестирования, вы можете заменить два экземпляра
3
с4
или5
сделать его напечатать в начале следующей минуты / секунды.Проверьте это здесь. Но обратите внимание, что онлайн-переводчик не показывает никакого вывода, пока программа не завершится. Кроме того, вы можете запустить его в режиме онлайн , где вывод отображается почти сразу, а не в буфере (но при тестировании с секундами, а не часами задержка будет заметна). В любом случае, если вы запускаете его локально с помощью интерпретатора Java, он работает как шарм.
объяснение
Это использует CJam,
et
который дает вам массивВот разбивка кода:
бонус
Это также работает для того же количества байтов:
Вместо того, чтобы выбирать час, мы выбираем префикс с датой и часом, и продолжаем цикл, пока массив даты и времени все еще имеет этот префикс.
источник
AppleScript,
157149 байтДа. Удивительно спорят.
Поскольку
log
выполняется печать на панели сообщений редактора сценариев, я считаю, что это самый близкий вывод к STDOUT. По сути, если вы получите строку времени текущей даты, она сделает что-то вроде этого:Код:
Выход:
Он будет захватывать первое число (
5
) перед двоеточием.Я думал, что это будет намного дольше, чем это, на самом деле. XD
источник
"1"
отnumber 1 in time string of(current date)
…first number in time string of (current date)
.first number
также дает мне только первую цифру времени ("0"
прямо сейчас, в 04:38).Снеговик 1.0.2 ,
7069 байтОбъяснение:
источник
PHP,
76, 70, 65, 62 и51 байтПредыдущая логика (63b):
Этот вид кодирования заставляет вас потерять работу, но это повторяется до тех пор, пока время не станет на 1 час больше, чем init.
-1 байты, заменяя
{}
АВЭС на некоторое время , чтобы;
(спасибо manatwork)-5 байт путем замены
echo'dary!';
в?>dary!
(спасибо manatwork)-4 байта, заменив
<?php
на короткую версию<?
(благодаря приме)-1 байт путем замены в
while
течениеfor
-3 байт путем замены
date(G)!=$h+1
вdate(G)==$h
(спасибо, прим)источник
{}
→;
иecho
→?>
уменьшит его немного. Хотя я бы предпочелLegen... wait for it...↵<?php while(+date('is'));?>dary!
<?
вместо<?php
). Использованиеfor(;;)
имеет ту же длину, что иwhile()
, но позволяет перемещать$h
назначение, не используя точку с запятой (for($h=date(h);...
). В этом{}
не было необходимости, но и в;
предыдущем нет?>
. У вас может быть проблема с$h
12, хотя (date(h)
никогда не будет 13).date(G)!=$h+1
наdate(G)==$h
. Короче, и решает проблему с часом;) Кроме того, удалите точку с запятой перед?>
.HH:00:00
, то есть в течение первой секунды целого часа.Perl 6 , 60 байт
источник
60²
было добавлено несколько дней назадJavascript
94 9087 байтНе так много в гольфе ...
Версия Downgoat:
Он хранит текущий час и зацикливается до тех пор, пока «старый» час равен текущему. Как только час поменяется, он напечатает все остальное! : D
Отказ от ответственности: если ваш браузер не любит его, вы были предупреждены.
источник
(a=alert)`Legen... wait for it...`,l=new Date,z=(b=l.getHours)();for(;z==b(););a`dary!`
(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
MATLAB - 89 байт
Довольно понятно. Сначала создайте дескриптор функции, чтобы получить текущий час системных часов. Затем отображение
Legen... wait for it...
с возвратом каретки, и затем мы заходим вwhile
цикл, где мы продолжаем проверять, не равен ли текущий час, добавленный с 1, текущему часу. Если это так, продолжайте цикл. Только до того момента, когда наступит следующий час, мы покажем,dary!
и после этого произойдет возврат каретки.Час MATLAB основан на 24-часовом индексировании, поэтому
mod
работа с базой 24 необходима для обработки перетока с 23:00 (23:00) до полуночи (00:00).Незначительная нота
Для этой
hour
функции требуется набор инструментов Финансовый временной ряд.now
Функция не подлежит ограничению этого, но она извлекает текущую дату и время как серийный номер , который ,hour
таким образом , использует для вычисления текущего часа.Хотите запустить это в Октаве?
Конечно! Поскольку у Octave нет этого набора инструментов, нам просто нужно изменить
hour
функцию так, чтобы она вызывала,datevec
который возвращает вектор из 6 элементов - по одному для каждого из года, месяца, дня, часа, минут и секунд. Вам просто нужно извлечь четвертый элемент вывода:Дополнительные символы увеличивают размер решения до 98 байт, но вы сможете запустить его в Octave. Обратите внимание на индексирование на месте без временной переменной в дескрипторе функции.
Нет инструментов для финансовых временных рядов?
Если вы хотите запустить это в MATLAB без набора инструментов Financial Time Series, поскольку вы не можете сразу индексировать переменные без временной переменной, это займет немного больше байтов для записи:
Сначала он получает текущее время и дату и сохраняет их в переменной,
h
а также сохраняет их в вызываемой автоматической переменнойans
. После этого мы продолжаем цикл и проверяем, не равен ли текущий час следующему. На каждой итерации мы постоянно обновляем автоматическую переменную с указанием текущего времени и даты. Как только следующий час совпадает с текущим временем и датой, мы отображаем последнюю часть строки и завершаем работу. Это увеличивает количество байтов до 114.Также обратите внимание, что вы не можете попробовать это онлайн. Онлайн-переводчики Octave будут иметь ограничение по времени выполнения кода, и, поскольку это
while
цикл, ожидающий следующего часа, вы получите тайм-аут при ожидании выполнения кода. Лучшее, что вы можете сделать, это запустить его на своем компьютере и убедиться, что он работает.источник
now
в то время цикла:a=@()disp('Legen... wait for it...');while floor(mod(now*86400,3600))end;disp('dary!')
. Вы также можете сэкономить еще 5 байтов, удаливa=@()
бит, потому что код «как есть» представляет собой полную программу. Прикрепленный код также не требует набора инструментов FTS.hour
функции Financial Toolbox ? :-)Mathematica,
858481 байтисточник
C 163 байта
источник
Microscript II, 45 байт
Наконец, использование для
D
инструкции.Печатает первую строку, многократно занимает время UTC в миллисекундах по модулю 3 600 000, пока не получится 0, а затем создает вторую строку, которая печатается неявно. 3 600 000 представлены в коде как 36x10 5 .
источник
TI-BASIC,
7064 байтаПрокляните эти двухбайтовые строчные буквы!
getTime
возвращает список из трех элементов{hours minutes seconds}
, поэтому сумма от 1-го элемента до 1-го равна часам. Когда есть разница между часами в начале и текущими часами, цикл заканчивается. Спасибо @FryAmTheEggman за это наблюдение.источник
R - 97 байт
источник
Python 3 -
9289 байтисточник
Python 2,
8281 байтСлишком низкая репутация, чтобы комментировать. Python 2 версия решения Александра Нигля. Сохраняет символы, потерянные в скобках. Также 3600 не требуется при расчете времени ожидания.
Всего сохранено 7 символов.
Редактировать: -1 байт благодаря @Kevin Cruijssen
источник
;
в конце программы. Кажется, работает нормально без него. :) Хороший ответ, так что +1 от меня (теперь вы можете комментировать).Командный скрипт Windows, 87 байт
Это постоянно сравнивает переменную часа, сохраненную при запуске, с текущим часом и успешно, если отличается.
источник
Perl, 62 байта
Специальная переменная
$^T
(aka$BASETIME
) записывает количество секунд с момента начала работы скрипта. К счастью, високосные секунды не учитываются в сумме, поэтому следующие значения эквивалентны:Удивительно, но эта переменная не только для чтения.
источник
-E
Кажется, обычным делом не является подсчет , поэтому вы можете сэкономить 5 байт, используяsay
.perl -E
представления и языки, на которых есть только онлайн-переводчики.-E
должно быть разрешено по умолчанию. В большинстве случаев, улучшение в любом случае тривиально и неинтересно.Japt ,
7261 байтКаждый
?
представляет Unicode непечатаемый символ. Вот как получить полный текст:В качестве альтернативы вот (надеюсь, обратимый) hexdump:
Этот код основан на JavaScript-ответе Джорджа Рейта с некоторыми изменениями, специфичными для Джапта. На днях я обнаружил, что если вы сжимаете код и вставляете его в строку, обернутую обратным тэгом, он автоматически распаковывается. Вот как это обрабатывается при компиляции:
В JS пара скобок будет возвращать последнее значение внутри; таким образом, этот код устанавливает синхронизированное событие, а затем возвращает
'Legen...'
строку, которая автоматически отправляется в STDOUT. Поскольку Japt в настоящее время не имеет возможности добавлять контент в STDOUT, кроме автоматического вывода при компиляции, я вместо этого использовал функцию vanilla JSalert
для синхронизированного вывода. Я надеюсь, что это разрешено.источник
Powershell,
5251 байт-1 байт спасибо @Veskah
Это выражение
Date|% M*e
получает значение изMinute
свойства из значения Current DateTime. Цикл заканчивается, когдаMinute
равен 0.источник
Python, 112 байт
Довольно понятно.
источник
Python - 159 байт
источник
Мышь-2002 , 62 байта
Требует от пользователя нажать клавишу ввода. Думаю.
Хорошо, хорошо, пока мы берем много байтов и ничего не выигрываем, давайте немного повеселимся.
Образец:
Видите, это таймер обратного отсчета до следующего часа! Он хорошо использует цикл while, который, даже ничего не делая, будет занимать ядро.
источник
Бейсик, 90 байт
Прямо, игра в гольф с использованием префиксов типа и неявного
End
утверждения. Стоимость в том, что он работает только на диалекте FreeBasicfblite
.источник
Befunge 98 -
6963 байтаКод содержит один непечатаемый символ (представленный
<ETB>
как непечатные, кажется, не отображаются в блоках кода). Его код символа - 23 ( символ конца передачи ).Предупреждение: предыдущий код будет выполняться в цикле занятости, при этом стек увеличивается с каждым повторением и, следовательно, может занимать большие объемы памяти.
источник
Желе ,
4847 байтов , неконкурентный-1 байт благодаря Эрику Гольфисту (используйте слово "Leg" в качестве слова в сжатии)
TryItOnline! или запустите тестовую версию с жестко закодированной строкой в формате времени
“59:57”
("mm: ss").Первый коммит Jelly был сделан Деннисом всего через несколько дней после того, как он создал этот вызов, я не уверен, в какой день этот код сначала сработал бы, но в любом случае он не конкурирует.
На момент написания статьи существует только один способ получить доступ ко времени, используя форматированную строку
ŒT
.Этот код вычисляет, как долго ждать, а затем спит. Если вызывается,
hh:00:00
он ждет3600
несколько секунд: он преобразует"00:00"
в,[0,0]
затем вычитает это из,59
чтобы уступить[59,59]
, преобразует это из базового шестидесяти, чтобы дать3599
, затем добавляет один для общего периода ожидания в3600
секундах.Может быть, петля могла быть сделана; или сжатую строку, использующую целое слово «Легендарный», можно использовать как-нибудь?
источник
“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»
вместßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷»
.Leg
(сLegen
) тоже слово :) Кроме того, этот ответ недействителен, потому что он зависит от минут и секунд00
.4ŒT
Вместо этого вы должны сделать что-то , так как есть правило, утверждающее это,In the event that the program is started in the first second of a full hour, it should it wait for the next full hour.
00:00
как она не проверяет это условие - она рассчитывает сколько секунд до следующего,"00:00"
а затем ожидает. Таким образом, он будет конвертироваться"00:00"
в[0,0]
вычитание из,59
чтобы привести к[59,59]
конвертированию, что из базового шестидесяти, чтобы получить,3599
а затем добавить один, чтобы получить3600
(протестируйте его, используя"00:00"
вместо него тестовую версию"59:57"
)60*(59-m)+(59-s)
должно быть60*(59-m)+(59-s)+1
вместо этого, во второй раз, когда это появляется?sleep x seconds then return y
- потому что<dyad>@
может быть определен как другая диада с помененными местами аргументами.MathGolf , 39 байт
Попробуйте онлайн!
Почти бьют пита ...
объяснение
источник
Pyth - 36 байт
Ожидание, пока минуты равняется 0 с циклом while.
источник
:00:00
Java, 136 байт
Сколько миллисекунд прошло с последнего часа - результат
System.currentTimeMillis()
мода 3600000.Эквивалентная монолитная программа имеет длину 159 байт:
источник
QBIC , 58 байт
объяснение
источник