Леген ... чекай ...


68

дерь!

У подіях, зовсім не пов’язаних із тим, що, як я сподіваюся, станеться зі мною в найближчі пару днів, я доручаю вам написати код, який робить таке:

  1. Друк

    Legen... wait for it...
    

    негайно, із заднім рядком.

  2. Зачекайте до наступної повної години (коли робота cron для нагородження значка працює).

  3. Друк

    dary!
    

    з необов'язковим заднім рядком.

Додаткові правила

  • Ви можете написати програму або функцію, але висновок повинен бути надрукований в STDOUT (або найближчій альтернативі вашої мови).

  • Доводиться чекати до наступної повної години, а не лише 60 хвилин. Якщо код запускається о 6:58, він повинен надрукувати другий рядок о 7:00.

  • Останній рядок повинен бути надрукований не пізніше однієї секунди після наступної повної години.

  • Якщо програма запускається в першій секунді повної години, вона повинна чекати наступної повної години.

  • Ви можете запитувати місцевий час або UTC.

  • Діють стандартні правила .


1
Я не розумію, чим третє додаткове правило відрізняється від основного "чекай до наступної повної години"
Fatalize

2
@Fatalize Це лише уточнення, що вам доведеться чекати, поки не зміниться година, а не хвилини та секунди - обидва в 00 .
Денніс

25
З днем ​​легендарного значка, @Dennis!
Kritixi Lithos

36
@ ΚριτικσιΛίθος Дякую! (Слава богу за заповнення вкладки.)
Денніс

2
"У годину" був би більш стандартним (і я вважаю набагато зрозумілішим) способом опису того, що ви називаєте "наступною повною годиною" (принаймні американською англійською).
jpmc26

Відповіді:


12

Піта, 42 41

J.d6." wâ«­hÖ`Ùá©h´^"WqJ.d6;"dary!

Нижче наведено шістнадцятковий код:

00000000  4a 2e 64 36 2e 22 20 77  0c 10 89 e2 ab 1b ad 68  |J.d6." w.......h|
00000010  0f 8c d6 60 d9 e1 a9 68  82 b4 5e 22 57 71 4a 2e  |...`...h..^"WqJ.|
00000020  64 36 3b 22 64 61 72 79  21                       |d6;"dary!|

Збережено 1 байт завдяки @isaacg

Використовує .dфункцію для отримання локальних значень часу. .d6повертає поточну годину. Це друкує перший рядок, потім чекає, поки година не відрізняється від годинної реклами початку програми, а потім друкує другий рядок.

Ви можете спробувати його в Інтернеті з .d7або в .d8протягом хвилини / секунди , але онлайн компілятор друкує що - небудь тільки тоді , коли програма завершується.

З повагою, Деннісе! :)


Рядок можна стиснути на 1 байт, використовуючи packed-str. Hexdump:0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
isaacg

@isaacg Уопс, я це перевірив, але, мабуть, зіпсував підрахунок. Я думав, що він стискає лише 1 байт, так що зайвий .зробить його однаковою довжиною. Нерозумні помилки один за одним: P
FryAmTheEggman

Тільки спробу розібратися, що це може зробити (зовсім не маючи досвіду з pyth) змусило мене сміятися. Я бачу dary, але ні legen! І pyth стверджує, що його легше зрозуміти тим, хто звик до звичайного програмування ...
Cyoce

@Cyoce Якщо ви заглянете в історію редагування, ви можете знайти простішу для читання версію. ."Вказує , що рядок повинен мати якісь - то операції , що виконуються на ньому , щоб отримати реальну рядок. Це просто компресійний трюк для гольфу. Якщо ви вирішили спробувати вивчити Pyth, удача! Не забувайте , що це Chatroom для нього теж :)
FryAmTheEggman

26

JavaScript (ES6), 74 байти

Ви можете змінити свій системний годинник перед тестуванням, поздоровляючи, якщо ви приземлилися тут, минувши 59 хвилин.

setTimeout(a=alert,36e5-new Date%36e5,"dary!");a`Legen... wait for it...
`


11
Буде 36e5працювати замість 3.6e6?
ETHproductions

8
@ETHproductions Ти красуня!
Джордж Рейт

3
@ETHproductions Це погані наукові позначення. Я не мав уявлення, що це працює на Javascript. Навчився чогось сьогодні !!!
Ісмаїл Мігель

2
@Optimizer Ах не знав, що setTimeoutбуде evalдля мене. Правда ... Спочатку я намагався використовувати, console.logале це навіть не працює, коли зберігається в змінній через контекст. Ви теж прекрасні!
Джордж Рейт

1
Ви можете setTimeoutправильно використовувати і навіть зберегти один байт:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
Бергі

9

CJam, 49 48 байт

et3="Legen... wait for it...
"o{_et3==}g;"dary!"

Використовує місцевий час. Для цілей тестування, ви можете замінити два примірника 3з 4або 5зробити його надрукувати на початку наступної хвилини / секунди.

Тестуйте це тут. Але зауважте, що онлайн-перекладач не показує жодного результату, поки програма не припиниться. Крім того, ви можете запустити його в програмі " Спробуйте в Інтернеті" , де результат відображається майже відразу, а не буферизується (але коли ви протестуєте його з секундами замість годин, затримка буде помітна). У будь-якому випадку, якщо ви запускаєте його локально за допомогою інтерпретатора Java, це працює як шарм.

Пояснення

Для цього використовується CJam, etякий дає вам масив

[year month day hour minute second ms weekday utc_offset]

Ось розбивка коду:

et3=       e# Get the current hour.
"Legen..." e# Push the first string including the linefeed.
o          e# Print it.
{          e# While the top of stack is truthy (which is popped)...
  _        e#   Copy the original hour.
  et3=     e#   Get the current hour.
  =        e#   Check for equality.
}g
;          e# Discard the original hour.
"dary!"    e# Push the second string which is printed automatically.

Бонус

Це також працює для того ж числа байтів:

et4<"Legen... wait for it...
"o{et1$#!}g;"dary!"

Замість вибору години ми вибираємо префікс із датою та годиною та продовжуємо цикл, поки масив datetime ще має цей префікс.


9

AppleScript, 157 149 байт

Ага. Дивно суперечить.

встановити d до числа 1 у часовому рядку (поточна дата)
журнал "Леген ... чекай ..."
повторити, поки d = число 1 у часовому рядку (поточна дата)
кінець
журнал "dary!"

Оскільки logдрукує на панелі «Повідомлення» редактора сценаріїв, я вважаю, що це найближчий вихід до STDOUT. В основному, якщо ви отримаєте часовий рядок поточної дати, він зробить щось подібне:

Код:

часовий рядок (поточна дата)

Вихід:

17:02:03

Це схопить перше число ( 5) перед двокрапкою.

Я думав, що це буде набагато довше, ніж це, насправді. xD


Так що станеться, якщо запустити його о 03:03:00?
Blacklight Shining

@BlacklightShining Він отримає номер 3 спереду і зачекає, поки він чотири. Знає лише число перед двокрапкою.
Аддісон Крим

О, я пропустив це. Добре. Як не дивно, я насправді отримую саме "1"з number 1 in time string of(current date)
Blacklight Shining

@BlacklightShining Ви, швидше за все, використовуєте старішу версію - в El Capitan це еквівалентно first number in time string of (current date).
Аддісон Кримп

Я на Йосеміті, так. first numberтакож дає мені лише першу цифру часу ( "0"зараз о 04:38).
Blacklight Shining

8

Сніговик 1.0.2 , 70 69 байт

~"Legen... wait for it...
"sP3600000*vt#nDnC!*:vt+#nD!#nL;bD"dary!"sP

Пояснення:

~              Make all variables active.
"..."sP        Print the first string.
3600000*vt#nD  Get the number of hours since the Unix epoch.
nC             Ceiling (round up), giving the time (divided by 36000) at which to
                 print the second string.
!*             Save that in a permavar.
:...;bD        Do the stuff in the block while its "return value" is truthy.
  vt+#nD       Again, get the number of hours since epoch.
  !#             Store the permavar that we saved earlier.
  nL             Is the current time less than the target time? (if so,
                   keep looping)
"..."sP        Print the second string.

7

PHP, 76, 70, 65, 62 51 байт

Legen... wait for it...
<?while(+date(is));?>dary!

Попередня логіка (63b):

Legen... wait for it...
<?for($h=date(G);date(G)==$h;)?>dary!

Цей вид кодування змушує вас втратити роботу, але ця петля поки не стане на 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!
манатурність

1
Кілька порад: ви можете використовувати короткі відкриті теги ( <?а не ніж <?php). Використання for(;;)такої ж довжини, як і while(), але дозволяє переміщувати $hзавдання, не потребуючи крапки з двокрапкою ( for($h=date(h);...). Це {}було не потрібно, але це не є ;попереднім ?>. У вас може бути проблема з $h12, хоча ( date(h)ніколи не буде 13).
прим

Дякую вам обом, відповідно оновив мою відповідь. Я не почуваюся надто добре, думаю, я не повинен робити важливу роботу сьогодні, тому що це чітко показує ха-ха
Martijn

2
Змінити date(G)!=$h+1на date(G)==$h. Коротше, і вирішує проблему години;) Також попередньо видаліть напівколонку ?>.
прим

1
@manatwork не вдасться чекати, якщо код запуститься HH:00:00, тобто протягом першої секунди повної години.
прим


5

Javascript 94 90 87 байт

Не так багато гольфу ...

alert`Legen... wait for it...`,l=l=>~~(Date.now()/36e5);for(z=l();z==l(););alert`dary!`

Версія пуховика:

(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`

Він зберігає поточну годину і циклічно протягом тих пір, поки "стара" година дорівнює поточній. Як тільки година змінилася, вона надрукує решту! : D

Відмова: Якщо ваш веб-переглядач не сподобається, вас попередили.


2
87 байт:(a=alert)`Legen... wait for it...`,l=new Date,z=(b=l.getHours)();for(;z==b(););a`dary!`
Пуховик

@Downgoat Дякую! (Я зараз намагаюся
пограти

1
Ще коротше (85 байт):(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
Пуховик

2
@Downgoat На один байт коротше:for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
Ісмаель Мігель

4

MATLAB - 89 байт

a=@()hour(now);disp('Legen... wait for it...');while(mod(a()+1,24)~=a())end;disp('dary!')

Досить зрозуміла. Спочатку створіть функціональну ручку, щоб захопити поточну годину системного годинника. Потім відображаємо Legen... wait for it...з поверненням каретки, а потім переходимо до whileциклу, де ми продовжуємо перевіряти, чи поточна година, додана з 1, не дорівнює поточній годині. Якщо це так, продовжуйте петлю. Лише до того моменту, коли відбудеться наступна година, ми відображаємось dary!і після цього відбувається повернення вагона.

Година MATLAB заснована на 24-годинній індексації, тому modоперація з базою 24 необхідна для обробки проливу з 11 вечора (23:00) до півночі (00:00).

Незначна примітка

Для hourфункції потрібна панель інструментів «Фінансовий часовий ряд». nowФункція не підлягає обмеженню цього, але вона витягує поточну дату і час як серійний номер , який , hourтаким чином , використовує для обчислення поточного години.

Хочете запустити це в Octave?

Звичайно! Оскільки в Octave немає цієї панелі інструментів, нам просто доведеться змінити hourфункцію так, щоб вона викликала, datevecякий повертає вектор із 6 елементів - по одному на рік, місяць, день, годину, хвилини та секунди. Вам просто доведеться витягнути четвертий елемент виводу:

a=@()datevec(now)(4);disp('Legen... wait for it...');while(mod(a()+1,24)~=a())end;disp('dary!')

Додаткові символи змушують рішення досягати 98 байт, але ви зможете запустити це в Octave. Зверніть увагу на індексацію на місці без тимчасової змінної у функційній ручці.

Немає інструментарію фінансових часових рядів?

Якщо ви хочете запустити це в MATLAB без панелі інструментів «Фінансовий часовий ряд», оскільки ви не можете індексувати змінні відразу без тимчасової, для запису знадобиться трохи більше байтів:

disp('Legen... wait for it...');h=datevec(now);ans=h;while(mod(h(4)+1,24)~=ans(4)),datevec(now);end;disp('dary!');

Перший отримує поточний час і дату і зберігає їх у змінну h, а також зберігає її в автоматичній змінній, що називається ans. Після цього ми продовжуємо циклічно та перевіряти, чи поточна година не дорівнює наступній годині. При кожній ітерації ми постійно оновлюємо автоматичну змінну до поточного часу та дати. Як тільки наступна година співпадає з поточним часом і датою, ми відображаємо останню частину рядка і виходимо. Це підштовхує кількість байтів до 114.


Також врахуйте, що ви не можете спробувати це в Інтернеті. У перекладачів Octave в Інтернеті буде обмежений час, коли виконується код, і оскільки це whileцикл, який чекає наступної години, ви отримаєте тайм-аут, очікуючи запуску коду. Найкраще, що ви можете зробити, це запустити його на власній машині і перевірити, чи працює він.


У вашому першому ви могли б заощадити 3 байта шляхом замість перевірки nowв той час циклу: a=@()disp('Legen... wait for it...');while floor(mod(now*86400,3600))end;disp('dary!'). Ви також можете зберегти ще 5 байт, видаливши a=@()біт, оскільки -код код є повноцінною програмою. Доданий код також не потребує панелі інструментів FTS.
Том Карпентер

Як на Землі ви знали про hourфункцію Financial Toolbox ? :-)
Луїс Мендо

Тепер я бачу, що ви мали на увазі під своїм коментарем щодо необхідності проміжних змінних для індексації ...
Луїс Мендо,

4

Математика, 85 84 81 байт

c=Print;c@"Legen... wait for it...";a:=DateValue@"Hour";b=a;While[a==b];c@"dary!"

Я думаю, що ви можете зберегти 2 байти, зробивши "dary!" вихідний вираз
CalculatorFeline

@CatsAreFluffy Тоді це був би просто фрагмент, а не повна програма.
LegionMammal978

Тому? Чи не є прийнятним вираз у програмі Mathematica, чи я щось пропускаю?
CalculatorFeline

Сценарії @CatsAreFluffy Mathematica існують, тому будь-яка задана повна програма, як очікується, запуститься в одній.
LegionMammal978

4

C, 163 байти

#include<time.h>
f(){puts("Legen... wait for it...");time_t t=time(0);struct tm l=*localtime(&t);while(l.tm_min+l.tm_sec)t=time(0),l=*localtime(&t);puts("dary!");}

3
Ласкаво просимо до PPCG!
Ерік Аутгольфер

155 байт (не заважай виконувати його на TIO, він не закінчиться, він закінчується через одну хвилину)
MD XF

3

Мікроскрипт II, 45 байт

"Legen... wait for it..."P[36s5E*sD%_]"dary!"

Нарешті, використання для Dінструкції.

Друкує перший рядок, багаторазово займає час UTC у мілісекундах за модулем 3 600 000, поки це не отримає 0, а потім видає другу рядок, яка друкується неявно. 3 600 000 представлені в коді як 36x10 5 .


Чи можете ви додати пояснення? c:
Addison Crump

@VoteToClose Done
SuperJedi224

3

TI-BASIC, 70 64 байт

getTime
Disp "Legen... wait for it...
Repeat sum(getTime-Ans,1,1
End
"dary

Проклинайте ці двобайтові малі літери!

getTimeповертає триелементний список {hours minutes seconds}, тому сума від 1-го елемента до 1-го становить години. Коли є різниця між годинами на початку та поточними годинами, цикл закінчується. Завдяки @FryAmTheEggman за це спостереження.


3

R - 97 байт

cat('Legen... wait for it...\n')
Sys.sleep(1)
while(as.double(Sys.time())%%3600>0){}
cat('dary!')


3

Python 2, 82 81 байт

from time import*;print'Legen... wait for it...';sleep(-time()%3600);print'dary!'

Занадто низька репутація для коментарів. Версія Python 2 рішення Олександра Ніґла. Зберігає символи, втрачені на дужках. Також 3600 не потрібні для підрахунку часу сну.

7 символів збережено загалом.

Редагувати: -1 байт завдяки @Kevin Cruijssen


1
Один додатковий байт можна зберегти, видаливши ;кінець програми в кінці програми. Здається, без нього добре працює. :) Хоча приємна відповідь, тому +1 від мене (зараз ви можете коментувати).
Кевін Круїссен

дякую вантажі @KevinCruijssen
Генрі Т

2

Windows Command Script, 87 байт

@set.=%time:~,2%&echo.Legen... wait for it...
:.
@if %.%==%time:~,2% goto:.
@echo.dary!

Це постійно порівнює часову змінну, що зберігається на старті, проти поточної години і досягає успіху, якщо вона відрізняється.


2

Perl, 62 байти

sleep -++$^T%3600+print'Legen... wait for it...
';print'dary!'

Спеціальна змінна $^T(ака $BASETIME) записує число секунд з епохи з моменту запуску сценарію. На щастя, високосні секунди не зараховуються до загальної кількості, так що наступні еквівалентні:

print$^T%3600;
@T=gmtime;print$T[1]*60+$T[0];

Дивно, але ця змінна не є лише для читання.


Тут не враховується підрахунок -E, тому ви можете заощадити 5 байт за допомогою say.
Денніс

З опису завдання: "Ви можете написати програму чи функцію." Код, запущений з командного рядка, не є ні одним
прим

Я бачу вашу думку. Однак обмеження програм або функцій застосовується до всіх викликів за замовчуванням, але ми все ще допускаємо perl -Eподання та мови, які мають лише онлайн-перекладачів.
Денніс

Я не погоджуюся, що це -Eслід дозволити за замовчуванням. У більшості випадків покращення є банальним і нецікавим, у будь-якому випадку.
прим

2

Japt , 72 61 байт

`{?tT?e?t(Ã?t,36e5-?w D?e%36e5,'ÜÝ!'),'Leg?... Ø2 f? ?...\n'}

Кожен ?являє собою Unicode недрукований графік. Ось як отримати повний текст:

  1. Відкрийте онлайн-перекладача .
  2. Вставте цей код у поле Код:
Oc"`\{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\\n'}
  1. Запустіть код, а потім видаліть його з поля Код.
  2. Виберіть вміст поля Виведення та перетягніть до поля Код. Копіювання-вставлення не спрацює .
  3. Замініть перший пробіл на нерозривний пробіл.
  4. (необов’язково) Встановіть годинник комп'ютера на xx: 59.
  5. Запустіть код.

Окрім цього, тут є (сподіваємось, оборотний) шестигранник:

00000000: 607b a074 548b 658c 7428 c300 742c 3336 65    `{ tT?e?t(Ã?t,36e
00000011: 352d 9a77 2044 8565 2533 3665 352c 27dc dd    5-?w D?e%36e5,'ÜÝ
00000022: 2127 293b 274c 6567 812e 2e2e 20d8 3220 66    !'),'Leg?... Ø2 f
00000033: 8e20 8a2e 2e2e 5c6e 277d                      ? ?...\n'}

Цей код заснований на JavaScript-відповіді Джорджа Рейта з кількома змінами, характерними для Japt. Днями я дізнався, що якщо стиснути код і вставити його в рядок, обгорнутий зворотним зв'язком, він автоматично розпакується. Ось як це обробляється за допомогою компіляції:

`{?tT?e?t(Ã?t,36e5-?w D?e%36e5,'ÜÝ!'),'Leg?... Ø2 f? ?...\n'}
"{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\n'}"
""+(setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\n')+""

У JS пара дужок поверне останнє значення всередині; Таким чином, цей код встановлює подію, приурочену до часу, потім повертає 'Legen...'рядок, який автоматично надсилається в STDOUT. Оскільки в Japt в даний час немає способу додати вміст до STDOUT, крім автоматичного виводу при компіляції, я замість цього використовував функцію JS vanilla alertдля тимчасового виводу. Я сподіваюся, що це дозволено.


Чи можете ви опублікувати шестнадцяткову інформацію про це?
спагето

@quartata Готово. Я вважаю, що це правильно.
ETHproductions

2

Powershell, 52 51 байт

-1 байт дякую @Veskah

'Legen... wait for it...'
for(;Date|% M*e){}'dary!'

Цей вираз Date|% M*eотримує значення Minuteвластивості від поточного значення DateTime. Петля закінчується при Minuteрівності 0.


1
Ви повинні мати можливість поставити "dary" безпосередньо після дужок, або, принаймні, у PSv5.
Веська

1

Пітон, 112 байт

import time as t;print "Legen... wait for it...";n=t.ctime();t.sleep((60-n.tm_min)*60+60-n.tm_sec);print "dary!"

Досить пояснюючи себе.


Можна зберегти 2, позбувшись пробілів між операторами друку та наступними рядками. :)
Генріх Т

1

Пітон - 159 байт

from datetime import*;from threading import*;p=print;n=datetime.now();p('Legen... wait for it...');Timer(3600-(n.minute*60+n.second),lambda:p('dary!')).start()

1

Миша-2002 , 62 байти

Потрібен користувач, щоб натиснути клавішу Enter. Я думаю.

"Legen... wait for it..."?&HOUR 1+x:(&HOUR x.=["dary"33!'0^])

Добре, що ж, поки ми беремо багато байтів і нічого не виграємо, давайте трохи повеселитися.

"Legen... wait for it... "?     ~ print & require keypress

&HOUR 1+ x:                     ~ get hr, add 1 and assign
(                               ~ while(1)
  &HOUR x. =                    ~ cmp current hr, stored hr
  [                             ~ if same
    #B;                           ~ backspace
    "dary"36!'                    ~ print this string and a !
    0^                            ~ exit cleanly
  ]                             ~ fi
  &MIN 59 - &ABS !              ~ get min, subtract from 59, abs & print
  ":"                           ~ record sep
  &SEC 59 - &ABS !              ~ same for second
  #B;                           ~ backspace
)
$B 8!' 8 !' 8 !' 8 !' 8 !'@     ~ backspace 5*
$                               ~ \bye

Зразок:

$ mouse legend.m02
Legen... wait for it... 20:32

Дивіться, це оновлений таймер зворотного відліку до наступної години! Він добре використовує цикл while, який навіть нічого не робить, займає ядро.


1

BASIC, 90 байт

Print"Legen... wait for it...":x$=Left(Time,2):Do:Loop Until x$<>Left(Time,2):Print"dary!"

Безпосередньо, гольф, використовуючи префікси типу та неявне Endтвердження. Вартість полягає в тому, що вона працює лише на діалекті FreeBasicfblite .


1

Befunge 98 - 69 63 байт

 v
v>a"...ti rof tiaw ...negeL<ETB>"k,
>"EMIT"4(MS+_"!yrad"5k,@

Код містить один недрукований символ (представлений <ETB>як недруковані, схоже, не відображаються в кодових блоках). Його символьний код - 23 ( символ блоку передачі "Кінець" ).

Попередження: Попередній код запускатиметься у зайнятому циклі, коли стек збільшується з кожним повторенням і, таким чином, може зайняти велику кількість пам'яті.


1

Желе , 48 47 байт , не конкуруючий

-1 байт завдяки Еріку Гольфісту (використовуйте "Ногу" як слово при стисненні)

“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»Ṅø3ŒTṣ”:V_@59ḅ60‘œS@“dary!”

СпробуйтеItOnline! або запустіть тестову версію із твердо кодованим рядком у форматі часу“59:57”("mm: ss").

Перше зобов'язання Джеллі було здійснено Деннісом через кілька днів після того, як він створив цей виклик, я не впевнений, в яку дату цей код вперше запрацював би, але він не конкурує в будь-якому випадку.
Існує, на момент написання, тільки один спосіб отримати доступ до часу , яке шляхом відформатованої рядки ŒT.

Цей код обчислює, як довго чекати, а потім спати. Якщо викликано, hh:00:00він чекає 3600секунди: він перетворюється "00:00"на [0,0]потім віднімає, що від 59дохідності [59,59], перетворює це з базових шістдесят, щоб дати 3599, а потім додає один за загальний період очікування 3600секунд.

Можливо, петельку можна було зробити; або стислий рядок із використанням усього слова "Легендарний" можна якось використовувати?

“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»Ṅø3ŒTṣ”:V_@59ḅ60‘œS@“dary!” - Main link: no arguments
“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»                            - compressed "Legen... wait for it..."
                    Ṅ                           - print z + '\n', return z
                     ø                          - niladic chain separation
                      3ŒT                       - '011' (3) time formatted string = "mm:ss"
                         ṣ”:                    - split on ':' -> ["mm","ss"]
                            V                   - eval -> [m,s]
                             _@59               - subtract from 59 - > [59-m, 59-s]
                                 ḅ60            - convert from base 60 -> 60*(59-m)+(59-s)
                                    ‘           - increment -> 60*(59-m)+(59-s) = y
                                        “dary!” - "dary!" = x
                                     œS@        - sleep y seconds then return x
                                                - implicit print

1
Використовуйте “ÇỴġƒḃ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")
Джонатан Аллан

1
Ой. Здається, я не можу читати довгий код Jelly, і що я не можу знати всі потреби та очікування кожного :) Хоча, у поясненні, я думаю, що це 60*(59-m)+(59-s)має бути 60*(59-m)+(59-s)+1замість цього, вдруге він з’являється?
Ерік Аутгольфер

Немає проблем - коментар не є найяснішим, що я коли-небудь писав.
Джонатан Аллан

Ну, якщо ви не можете взяти клопоту, я можу його відредагувати. Також я б рекомендував робити x / y як ліво / право, і просто сказати sleep x seconds then return y- тому що <dyad>@його можна визначити як іншу діаду із заміненими аргами.
Ерік Атголфер

1

MathGolf , 39 байт

"Legen... wait for it..."pÆt♪/╚÷▼"dary!

Спробуйте в Інтернеті!

Майже бив піт ...

Пояснення

Æ     ▼  Repeat the next 5 characters while false
 t       push unix time in milliseconds
  ♪/     divide by 1000
    ╚÷   check if divisible by 3600 (tio solution has 3 in its place)

"Майже"? Схоже, ти зробив.
Патрік Робертс

@PatrickRoberts є ще одне pyth рішення, яке становить 36 байт, не могло потрапити туди навіть зі стислими рядками та іншими хитрощами.
maxb

О, той. Це неправильно, подивіться коментар.
Патрік Робертс

@PatrickRoberts Я, можливо, не зможу виконати критерій "повинен почекати одну годину, якщо запустити 00:00", але я міг би змінити його, щоб перевірити Unixtime в мілісекундах, що ділиться на 3600000, з тим самим числом байтів. Оскільки перший друк повинен зайняти більше, ніж мілісекунда, це завжди має працювати
maxb


0

Java, 136 байт

class a{void A(){System.out.println("Legen... wait for it...");while(System.currentTimeMillis()%3600000!=0);System.out.print("dary!");}}

Скільки мілісекунд пройшло з часу останньої повної години - це результат System.currentTimeMillis()3 600 000 мод.

Еквівалентна монолітна програма довжиною 159 байт:

interface a{static void main(String[]A){System.out.println("Legen... wait for it...");while(System.currentTimeMillis()%3600000!=0);System.out.print("dary!");}}

0

QBIC , 58 байт

?@Legen... wait for it...|#Dary!|{~mid$$|(_d,4,2)=@00||_XB

Пояснення

?@Legen... wait for it...|     Define string literal "Leg[..]it..." and print it
#Dary!|                        Define string B as "Dary!", but don't use it yet
{                              Opens an indefinite DO loop
~mid$$|(...)=@00|              Translates to IF MID$(...) = C$, where C$ is "00"
    The MID$ takes two characters, starting from pos 4, from the system's time (_d)
    So, if the string "11:00" has "00" starting at pos 4,
_XB                            Terminate the program and print string B
(The DO loop and the IF are closed implicitly)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.