Legen… poczekaj na to…


68

pamiętnik!

W wydarzeniach całkowicie niezwiązanych z tym, co mam nadzieję przydarzy się mi w ciągu najbliższych kilku dni, zlecam Ci napisanie kodu, który wykonuje następujące czynności:

  1. Wydrukować

    Legen... wait for it...
    

    natychmiast, z końcowym znakiem nowej linii.

  2. Poczekaj do następnej pełnej godziny (kiedy uruchomi się zadanie cron za przyznanie odznaki).

  3. Wydrukować

    dary!
    

    z opcjonalnym końcowym znakiem nowej linii.

Dodatkowe zasady

  • Możesz napisać program lub funkcję, ale wyjście musi zostać wydrukowane do STDOUT (lub najbliższej alternatywy dla twojego języka).

  • Musisz poczekać do następnej pełnej godziny, nie tylko 60 minut. Jeśli kod jest uruchamiany o 6:58, powinien wydrukować drugi wiersz o 7:00.

  • Ostatni wiersz należy wydrukować nie później niż jedną sekundę po następnej pełnej godzinie.

  • Jeśli program zostanie uruchomiony w pierwszej sekundzie pełnej godziny, powinien poczekać do następnej pełnej godziny.

  • Możesz zapytać o czas lokalny lub czas UTC.

  • Obowiązują standardowe zasady .


1
Nie rozumiem, w jaki sposób trzecia dodatkowa reguła różni się od podstawowego „poczekaj do następnej pełnej godziny”
Fatalize

2
@Fatalize To tylko wyjaśnienie, że musisz poczekać, aż godzina się zmieni, a nie, dopóki minuty i sekundy nie będą na 00 .
Dennis

25
Happy Legendary Badge, @Dennis!
Kritixi Lithos

36
@ ΚριτικσιΛίθος Dzięki! (Dzięki Bogu za uzupełnienie tabulacji.)
Dennis

2
„W godzinie” byłoby bardziej standardowym (i uważam, że o wiele bardziej wyraźnym) sposobem opisania tego, co nazywacie „następną pełną godziną” (przynajmniej w amerykańskim angielskim).
jpmc26

Odpowiedzi:


12

Pyth, 42 41

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

Poniżej znajduje się zrzut heksowy kodu:

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!|

Zapisano 1 bajt dzięki @isaacg

Używa .dfunkcji, aby uzyskać wartości związane z czasem lokalnym. .d6zwraca bieżącą godzinę. Spowoduje to wydrukowanie pierwszego ciągu, a następnie zaczeka, aż godzina będzie inna niż godzina po uruchomieniu programu, a następnie wydrukuje drugi ciąg.

Można spróbować go online z .d7lub .d8do minuty / sekundy, ale kompilator Internecie drukuje nic tylko wtedy, gdy program kończy.

Gratulacje, Dennis! :)


Ciąg może być skompresowany o 1 bajt za pomocą parametru pack-str. Hexdump:0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
isaacg

@isaacg Ups, sprawdziłem to, ale musiałem mieć problemy z liczeniem. Myślałem, że skompresował tylko 1 bajt, więc dodatkowy .nadałby mu tę samą długość. Głupie błędy off-by-one: P
FryAmTheEggman

Już sama próba wymyślenia, co to może zrobić (bez żadnego doświadczenia z pytem) rozśmieszyła mnie. Rozumiem dary, ale nie legen! Pyth twierdzi, że jest łatwiejszy do zrozumienia dla tych, którzy są przyzwyczajeni do konwencjonalnego programowania ...
Cyoce,

@Cyoce Jeśli spojrzysz na historię edycji, znajdziesz łatwiejszą do odczytania wersję. ."Wskazuje, że łańcuch powinien mieć pewne operacje wykonywane na nim, aby uzyskać prawdziwy łańcuch. To tylko sztuczka kompresyjna do gry w golfa. Jeśli zdecydujesz się na naukę Pytha, powodzenia! Nie zapominaj, że jest też czat :)
FryAmTheEggman

26

JavaScript (ES6), 74 bajty

Przed testem możesz zmienić zegar systemowy, gratulacje, jeśli wylądowałeś tutaj 59 minut po.

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


11
Czy 36e5działałby zamiast 3.6e6?
ETHprodukcje

8
@ETHproductions You beauty!
George Reith,

3
@ETHproductions To zła notacja naukowa. Nie miałem pojęcia, że ​​działa na Javascript. Nauczyłem się dziś czegoś !!!
Ismael Miguel

2
@Optimizer Ach nie wiedział, setTimeoutbyłoby evaldla mnie. To prawda ... Początkowo próbowałem użyć, console.logale to nawet nie działa, gdy jest przechowywane w zmiennej ze względu na kontekst. Ty też jesteś piękna!
George Reith

1
Możesz użyć setTimeoutpoprawnie, a nawet zapisać jeden bajt:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
Bergi

9

CJam, 49 48 bajtów

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

Wykorzystuje czas lokalny. Dla celów testowych można wymienić dwie instancje 3z 4lub 5aby drukować na początku następnej minuty / sekundy.

Sprawdź to tutaj. Należy jednak pamiętać, że tłumacz online nie wyświetla żadnych danych wyjściowych, dopóki program się nie zakończy. Możesz też uruchomić go w trybie Wypróbuj online , w którym wyniki są wyświetlane niemal natychmiast, a nie buforowane (ale podczas testowania sekund zamiast godzin zauważalne będzie opóźnienie). W każdym razie, jeśli uruchomisz go lokalnie za pomocą interpretera Java, działa to jak urok.

Wyjaśnienie

To wykorzystuje CJam, etktóry daje tablicę

[year month day hour minute second ms weekday utc_offset]

Oto podział kodu:

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.

Premia

Działa to również dla tej samej liczby bajtów:

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

Zamiast wybierać godzinę, wybieramy prefiks z datą i godziną i utrzymujemy pętlę, dopóki tablica datetime nadal ma ten prefiks.


9

AppleScript, 157 149 bajtów

Huh Zaskakująco walczący.

ustaw d na cyfrę 1 w ciągu czasu (bieżąca data)
log "Legen ... poczekaj na to ..."
powtórz, dopóki d = numer 1 w ciągu czasu (bieżąca data)
koniec
zaloguj „pamiętnik!”

Ponieważ logdrukuje się w panelu Wiadomości edytora skryptów, uważam, że jest to wyjście najbliższe STDOUT. Zasadniczo, jeśli otrzymasz ciąg czasu bieżącej daty, zrobi to mniej więcej tak:

Kod:

ciąg czasu (bieżąca data)

Wynik:

17:02:03 PM

Pobierze pierwszą liczbę ( 5) przed dwukropkiem.

Myślałem, że tak naprawdę będzie to znacznie dłużej. xD


Co się stanie, jeśli uruchomisz go o 03:03:00?
Blacklight Shining

@BlacklightShining Otrzyma numer 3 z przodu i zaczeka, aż będzie czwarta. Jest świadomy tylko liczby przed dwukropkiem.
Addison Crump

Och, tęskniłem za tym. W porządku. Co dziwne, właściwie dostaję właśnie "1"od number 1 in time string of(current date)
Blacklight Shining

@BlacklightShining Prawdopodobnie używasz starszej wersji - w El Capitan jest to równoważne z first number in time string of (current date).
Addison Crump,

Jestem na Yosemite, tak. first numberdaje mi tylko pierwszą cyfrę czasu ( "0"teraz, o 04:38).
Blacklight Shining

8

Snowman 1.0.2 , 70 69 bajtów

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

Wyjaśnienie:

~              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 bajtów

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

Poprzednia logika (63b):

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

Ten rodzaj kodowania powoduje, że tracisz pracę, ale pętle te trwają o 1 godzinę dłużej niż init.

-1 bajt zastępując {}afer na jakiś czas, aby ;(dzięki manatwork)
-5 bajtów zastępując echo'dary!';się ?>dary!(dzięki manatwork)
-4 bajtów zastępując <?phpw wersji krótkiej <?(dzięki primo)
-1 bajt zastępując whileprzez for
-3 bajtów zastępując date(G)!=$h+1do date(G)==$h(dzięki primo)


Fajny, ale {};i echo?>nieco by to zmniejszyły. Chociaż wolałbymLegen... wait for it...↵<?php while(+date('is'));?>dary!
manatwork

1
Kilka wskazówek: możesz użyć krótkich otwartych tagów ( <?zamiast <?php). Użycie for(;;)ma taką samą długość jak while(), ale pozwala przenieść $hzadanie, bez potrzeby używania średnika ( for($h=date(h);...). Nie {}były konieczne, ale nie jest to ;poprzednie ?>. Być może masz problem z $h12, ale ( date(h)nigdy nie będzie 13).
primo

Dziękuję obojgu, odpowiednio zaktualizowałem moją odpowiedź. Nie czuję się zbyt dobrze, chyba nie powinienem dzisiaj wykonywać ważnej pracy, ponieważ wyraźnie pokazuje haha
Martijn

2
Zmień date(G)!=$h+1na date(G)==$h. Krótszy i rozwiązuje problem godzinowy;) Również wcześniej usuń średnik ?>.
primo

1
@manatwork nie będzie czekać, aż kod zostanie uruchomiony HH:00:00, tj. w ciągu pierwszej sekundy pełnej godziny.
primo


5

JavaScript 94 90 87 bajtów

Nie tyle grałem w golfa ...

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

Wersja Downgoat:

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

Przechowuje bieżącą godzinę i pętle tak długo, jak długo „stara” godzina jest równa bieżącej. Jak tylko godzina się zmieni, wydrukuje resztę! :RE

Oświadczenie: Jeśli Twoja przeglądarka nie lubi tego, zostałeś ostrzeżony.


2
87 bajtów:(a=alert)`Legen... wait for it...`,l=new Date,z=(b=l.getHours)();for(;z==b(););a`dary!`
Downgoat

@Downgoat Thanks! (Próbuję teraz
zagrać w

1
Jeszcze krótszy (85 bajtów):(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
Downgoat

2
@Downgoat Jeden bajt krótszy:for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
Ismael Miguel

4

MATLAB - 89 bajtów

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

Dość oczywiste. Najpierw utwórz uchwyt funkcji, aby pobrać bieżącą godzinę zegara systemowego. Następnie wyświetlaj Legen... wait for it...ze znakiem powrotu karetki, a następnie wchodzimy do whilepętli, w której sprawdzamy, czy bieżąca godzina dodana z 1 nie jest równa bieżącej godzinie. Jeśli tak, kontynuuj zapętlenie. Tylko do momentu, gdy nastąpi następna godzina, wyświetlamy dary!i powrót karetki następuje po.

Godzina MATLAB opiera się na indeksowaniu 24-godzinnym, więc modoperacja z bazą 24 jest wymagana do obsługi rozlewania od 23:00 (23:00) do północy (00:00).

Drobne uwagi

Ta hourfunkcja wymaga zestawu narzędzi Financial Time Series. nowFunkcja nie podlega tym ograniczeniom, ale pobiera aktualną datę i czas jako numer seryjny, który hourw ten sposób wykorzystuje obliczyć aktualną godzinę.

Chcesz uruchomić to w Octave?

Pewnie! Ponieważ Octave nie ma tego zestawu narzędzi, musielibyśmy tylko zmodyfikować hourfunkcję, aby wywoływała datevecwektor 6 elementów - po jednym dla każdego roku, miesiąca, dnia, godziny, minut i sekund. Musisz po prostu wyodrębnić czwarty element wyniku:

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

Dodatkowe znaki sprawiają, że rozwiązanie ma maksymalnie 98 bajtów, ale będziesz mógł uruchomić to w Octave. Zwróć uwagę na indeksowanie w miejscu bez zmiennej tymczasowej w uchwycie funkcji.

Brak zestawu narzędzi dla Financial Time Series?

Jeśli chcesz uruchomić to w MATLAB bez zestawu narzędzi Financial Time Series, ponieważ nie możesz natychmiast indeksować do zmiennych bez tymczasowego, zapisanie zajmie nieco więcej bajtów:

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

Najpierw pobiera bieżącą godzinę i datę i zapisuje ją w zmiennej, ha także zapisuje w zmiennej automatycznej o nazwie ans. Następnie ciągle zapętlamy i sprawdzamy, czy bieżąca godzina nie jest równa następnej godzinie. Przy każdej iteracji aktualizujemy zmienną automatyczną o bieżącą godzinę i datę. Gdy tylko następna godzina dopasuje się do bieżącej godziny i daty, wyświetlamy ostatnią część ciągu i wychodzimy. To powoduje zwiększenie liczby bajtów do 114.


Pamiętaj też, że nie możesz wypróbować tego online. Tłumacze online Octave będą mieli limit czasu na wykonanie kodu, a ponieważ jest to whilepętla czekająca na następną godzinę, otrzymasz limit czasu podczas oczekiwania na uruchomienie kodu. Najlepszą rzeczą, jaką możesz zrobić, to uruchomić go na własnym komputerze i sprawdzić, czy działa.


W pierwszym możesz zapisać 3 bajty, zamiast tego sprawdzając noww pętli while:a=@()disp('Legen... wait for it...');while floor(mod(now*86400,3600))end;disp('dary!') . Możesz również zapisać kolejne 5 bajtów, usuwając a=@()bit, ponieważ taki kod stanowi pełny program. Załączony kod nie wymaga również zestawu narzędzi FTS.
Tom Carpenter

Jak do cholery wiedziałeś o Financial Toolbox hour funkcji ? :-)
Luis Mendo

Teraz rozumiem, co miałeś na myśli mówiąc o potrzebie zmiennych pośrednich do indeksowania ...
Luis Mendo

4

Mathematica, 85 84 81 bajtów

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

Myślę, że możesz zaoszczędzić 2 bajty, tworząc „dary!” wynik wyrażenia.
CalculatorFeline

@CatsAreFluffy To byłby tylko fragment kodu, a nie pełny program.
LegionMammal978

Więc? Czy dane wyjściowe wyrażeń nie są akceptowane w Mathematica, czy coś mi brakuje?
CalculatorFeline

@CatsAreFluffy Skrypty Mathematica istnieją, więc każdy pełny program powinien działać w jednym.
LegionMammal978

4

C, 163 bajty

#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
Witamy w PPCG!
Erik the Outgolfer,

155 bajtów (nie przejmuj się uruchomieniem go na TIO, nie skończy się, upłynie limit czasu po minucie)
MD XF

3

Microscript II, 45 bajtów

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

Wreszcie zastosowanie Dinstrukcji.

Drukuje pierwszy ciąg, wielokrotnie zajmuje czas UTC w milul sekundach modulo 3 600 000, aż da to 0, a następnie produkuje drugi ciąg, który jest drukowany niejawnie. 3 600 000 jest reprezentowane w kodzie jako 36x10 5 .


Czy możesz dodać wyjaśnienie? c:
Addison Crump

@VoteToClose Done
SuperJedi224,

3

TI-BASIC, 70 64 bajtów

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

Przeklinaj te dwubajtowe małe litery!

getTimezwraca listę trzech elementów {hours minutes seconds}, więc suma od pierwszego elementu do pierwszego to godziny. Kiedy istnieje różnica między godzinami na początku i bieżącymi godzinami, pętla kończy się. Dzięki @FryAmTheEggman za tę obserwację.


3

R - 97 bajtów

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

3

Python 3 - 92 89 bajtów

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

3

Python 2, 82 81 bajtów

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

Zbyt niska reputacja, aby komentować. Wersja rozwiązania Aleksandra Nigla w Pythonie 2. Zapisuje znaki utracone w nawiasach. Ponadto 3600 nie jest potrzebne do obliczenia czasu snu.

Ogólnie 7 zapisanych znaków.

Edytuj: -1 bajt dzięki @Kevin Cruijssen


1
Jeden dodatkowy bajt można zapisać, usuwając znak ;końca na końcu programu. Bez tego działa dobrze. :) Ładna odpowiedź, więc +1 ode mnie (teraz możesz komentować).
Kevin Cruijssen

dzięki ładunki @KevinCruijssen
Henry T

2

Skrypt poleceń systemu Windows, 87 bajtów

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

To nieustannie porównuje zmienną godziny zapisaną na początku z bieżącą godziną i kończy się powodzeniem, jeśli jest inna.


2

Perl, 62 bajty

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

Zmienna specjalna $^T(aka $BASETIME) rejestruje liczbę sekund od epoki od momentu uruchomienia skryptu. Na szczęście sekundy przestępne nie są liczone w sumie, więc następujące są równoważne:

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

Nieoczekiwanie ta zmienna nie jest tylko do odczytu.


Nie liczenie -Ewydaje się tutaj powszechne, więc można zaoszczędzić 5 bajtów za pomocą say.
Dennis

Z opisu wyzwania: „Możesz napisać program lub funkcję”. Kod uruchamiany z wiersza poleceń nie jest żaden.
primo

Rozumiem co masz na myśli. Jednak ograniczenie do programów lub funkcji domyślnie dotyczy wszystkich wyzwań, ale nadal zezwalamy na perl -Ezgłoszenia i języki, które mają tylko tłumacze online.
Dennis

Nie zgadzam się, że -Epowinno być domyślnie dozwolone. W większości przypadków poprawa jest w każdym razie trywialna i nieciekawa.
primo

2

Japt , 72 61 bajtów

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

Każda ?reprezentuje znak niedrukowalny w Unicode. Oto jak uzyskać pełny tekst:

  1. Otwórz tłumacza online .
  2. Wklej ten kod w polu Kod:
Oc"`\{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\\n'}
  1. Uruchom kod, a następnie usuń go z pola Kod.
  2. Wybierz zawartość pola Wyjście i przeciągnij do pola Kod. Kopiowanie-wklejanie nie będzie działać .
  3. Zastąp pierwsze pole spacją niełamiącą.
  4. (opcjonalnie) Ustaw zegar komputera na xx: 59.
  5. Uruchom kod.

Alternatywnie, oto (mam nadzieję, że odwracalne) zrzut heksowy:

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'}

Ten kod jest oparty na odpowiedzi George'a Reitha na JavaScript , z kilkoma zmianami specyficznymi dla Japt. Dowiedziałem się innego dnia, że jeśli skompresujesz kod i wstawisz go do łańcucha owiniętego wstecz, automatycznie się rozpakuje. Oto jak jest przetwarzany przez kompilację:

`{?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')+""

W JS para nawiasów zwróci ostatnią wartość w środku; dlatego ten kod ustawia zdarzenie czasowe, a następnie zwraca 'Legen...'ciąg, który jest automatycznie wysyłany do STDOUT. Ponieważ Japt nie ma obecnie możliwości dodania zawartości do STDOUT poza automatycznym wyjściem podczas kompilacji, zamiast tego użyłem waniliowej funkcji JS alertdla wyjściowego pomiaru czasu. Mam nadzieję, że jest to dozwolone.


Czy możesz opublikować zrzut heksowy tego?
spaghetto

@quartata Gotowe. Uważam, że to prawda.
ETHprodukcje

2

PowerShell, 52 51 bajtów

-1 bajtów dzięki @ Veskah

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

To wyrażenie Date|% M*epobiera wartość z Minutewłaściwości z bieżącej wartości DateTime. Pętla kończy się, gdy jest Minuterówna 0.


1
Powinieneś być w stanie umieścić „pamiętnik” bezpośrednio za nawiasami klamrowymi, a przynajmniej w PSv5.
Veskah

1

Python, 112 bajtów

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!"

Dość oczywiste.


Można zapisać 2, pozbywając się spacji między instrukcjami drukowania i następującymi ciągami. :)
Henry T

1

Python - 159 bajtów

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

Mysz-2002 , 62 bajty

Wymaga od użytkownika naciśnięcia enter. Myślę.

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

Ok, cóż, podczas gdy bierzemy dużo bajtów i niczego nie wygrywamy, bawmy się trochę.

"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

Próba:

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

Widzisz, to odliczający czas aktualizator na miejscu do następnej godziny! Dobrze wykorzystuje pętlę while, która nawet bezczynność zajmie rdzeń.


1

BASIC, 90 bajtów

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

Prosto, gra w golfa przy użyciu prefiksów typu i niejawnej Endinstrukcji. Koszt jest taki, że działa tylko w dialekcie FreeBasicfblite .


1

Befunge 98 - 69 63 bajtów

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

Kod zawiera jeden znak niedrukowalny (reprezentowany przez <ETB>to, że nie można drukować w blokach kodu). Jego kod znakowy to 23 ( znak końca transmisji ).

Ostrzeżenie: poprzedni kod będzie działał w zajętej pętli, a stos będzie się powiększał przy każdym powtórzeniu, a zatem może zużywać duże ilości pamięci.


1

Galaretka , 48 47 bajtów , niekonkurująca

-1 bajt dzięki Erikowi Golferowi (użyj „Leg” jako słowa w kompresji)

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

TryItOnline! lub uruchom wersję testową z zakodowanym ciągiem w formacie“59:57” („mm: ss”).

Pierwsze zatwierdzenie Jelly dokonał Dennis zaledwie kilka dni po tym, jak stworzył to wyzwanie, nie jestem pewien, kiedy ten kod zadziałałby po raz pierwszy, ale w każdym razie nie jest konkurencyjny.
Nie ma w chwili pisania tego tekstu, tylko jeden sposób, aby uzyskać dostęp do czasu, który jest w drodze sformatowany ciąg, ŒT.

Ten kod oblicza, jak długo czekać, a następnie śpi. Jeśli zostanie wywołany hh:00:00, czeka na 3600kilka sekund: konwertuje "00:00"na, [0,0]a następnie odejmuje to od, 59aby dać [59,59], konwertuje to z podstawy sześćdziesięciu na dawanie 3599, a następnie dodaje jeden dla całkowitego okresu oczekiwania wynoszącego 3600kilka sekund.

Może uda się zrobić pętlę; czy w jakiś sposób można użyć skompresowanego ciągu zawierającego całe słowo „legendarny”?

“ÇỴġƒḃ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
Użyj “ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»zamiast “¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷». Leg(od Legen) to również słowo :) Również ta odpowiedź jest nieprawidłowa, ponieważ zależy od obu minut i sekund 00. Zamiast tego powinieneś coś zrobić 4ŒT, ponieważ istnieje reguła, że: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.
Erik Outgolfer

Fajnie, „Noga” oszczędza bajt, dzięki. Jednak łącze działa w momencie wywołania, 00:00ponieważ nie testuje tego warunku - oblicza, ile sekund do następnego, "00:00"a następnie czeka. Konwertuje więc, "00:00"aby [0,0]odjąć od, 59aby uzyskać, [59,59]przekonwertować to z sześćdziesiątki podstawowej, aby uzyskać, 3599a następnie dodać jedną, aby uzyskać 3600(przetestuj, używając wersji testowej "00:00"zamiast "59:57")
Jonathan Allan,

1
O. Wygląda na to, że nie potrafię odczytać długiego kodu Jelly i że nie wiem, jakie są zastosowania i oczekiwania wszystkich :) Chociaż w wyjaśnieniu myślę, że tak 60*(59-m)+(59-s)musi być 60*(59-m)+(59-s)+1, po raz drugi się pojawia?
Erik the Outgolfer,

Nie ma problemu - komentarz nie jest najczystszym, jaki kiedykolwiek napisałem.
Jonathan Allan,

Cóż, jeśli nie możesz sobie poradzić, mogę to edytować. sleep x seconds then return yPoleciłbym też x / y jako lewo / prawo i po prostu powiedz - bo <dyad>@można zdefiniować jako kolejną diadę z zamienionymi argumentami.
Erik the Outgolfer,

1

MathGolf , 39 bajtów

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

Wypróbuj online!

Prawie pobity pyth ...

Wyjaśnienie

Æ     ▼  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)

"Prawie"? Wygląda jak ty.
Patrick Roberts,

@PatrickRoberts istnieje inne rozwiązanie pythowe, które ma 36 bajtów, ale nie do końca może się tam dostać nawet przy skompresowanych ciągach znaków i innych sztuczkach.
maxb

Och, ten. To źle, spójrz na komentarz.
Patrick Roberts,

@PatrickRoberts Mogę również nie spełnić kryterium „muszę czekać godzinę, jeśli uruchomię na 00:00”, ale mogę to zmienić, aby sprawdzić czas uniksowy w milisekundach podzielny przez 3600000 z tą samą liczbą bajtów. Ponieważ pierwszy wydruk powinien zająć więcej niż jeden milisekunda, zawsze powinno działać
maxb

0

Pyth - 36 bajtów

Oczekiwanie, aż minuty będą wynosić 0 z pętlą while.

"Legen... wait for it..."W.d7)"dary!

11
Musisz poczekać, aż minuty i sekundy :00:00
osiągną wartość

0

Java, 136 bajtów

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

Ile milisekund minęło od ostatniej pełnej godziny jest wynikiem System.currentTimeMillis()3 600 000 modów.

Równoważny program monolityczny ma 159 bajtów długości:

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 bajtów

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

Wyjaśnienie

?@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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.