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:
Wydrukować
Legen... wait for it...
natychmiast, z końcowym znakiem nowej linii.
Poczekaj do następnej pełnej godziny (kiedy uruchomi się zadanie cron za przyznanie odznaki).
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 gry w golfa .
Odpowiedzi:
Pyth,
4241Poniżej znajduje się zrzut heksowy kodu:
Zapisano 1 bajt dzięki @isaacg
Używa
.d
funkcji, aby uzyskać wartości związane z czasem lokalnym..d6
zwraca 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
.d7
lub.d8
do minuty / sekundy, ale kompilator Internecie drukuje nic tylko wtedy, gdy program kończy.Gratulacje, Dennis! :)
źródło
0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
.
nadałby mu tę samą długość. Głupie błędy off-by-one: Pdary
, ale nielegen
! Pyth twierdzi, że jest łatwiejszy do zrozumienia dla tych, którzy są przyzwyczajeni do konwencjonalnego programowania ...."
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 :)JavaScript (ES6), 74 bajty
Przed testem możesz zmienić zegar systemowy, gratulacje, jeśli wylądowałeś tutaj 59 minut po.
źródło
36e5
działałby zamiast3.6e6
?setTimeout
byłobyeval
dla mnie. To prawda ... Początkowo próbowałem użyć,console.log
ale to nawet nie działa, gdy jest przechowywane w zmiennej ze względu na kontekst. Ty też jesteś piękna!setTimeout
poprawnie, a nawet zapisać jeden bajt:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
CJam,
4948 bajtówWykorzystuje czas lokalny. Dla celów testowych można wymienić dwie instancje
3
z4
lub5
aby 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,
et
który daje tablicęOto podział kodu:
Premia
Działa to również dla tej samej liczby bajtów:
Zamiast wybierać godzinę, wybieramy prefiks z datą i godziną i utrzymujemy pętlę, dopóki tablica datetime nadal ma ten prefiks.
źródło
AppleScript,
157149 bajtówHuh Zaskakująco walczący.
Ponieważ
log
drukuje 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:
Wynik:
Pobierze pierwszą liczbę (
5
) przed dwukropkiem.Myślałem, że tak naprawdę będzie to znacznie dłużej. xD
źródło
"1"
odnumber 1 in time string of(current date)
…first number in time string of (current date)
.first number
daje mi tylko pierwszą cyfrę czasu ("0"
teraz, o 04:38).Snowman 1.0.2 ,
7069 bajtówWyjaśnienie:
źródło
PHP,
76, 70, 65, 6251 bajtówPoprzednia logika (63b):
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
<?php
w wersji krótkiej<?
(dzięki primo)-1 bajt zastępując
while
przezfor
-3 bajtów zastępując
date(G)!=$h+1
dodate(G)==$h
(dzięki primo)źródło
{}
→;
iecho
→?>
nieco by to zmniejszyły. Chociaż wolałbymLegen... wait for it...↵<?php while(+date('is'));?>dary!
<?
zamiast<?php
). Użyciefor(;;)
ma taką samą długość jakwhile()
, ale pozwala przenieść$h
zadanie, bez potrzeby używania średnika (for($h=date(h);...
). Nie{}
były konieczne, ale nie jest to;
poprzednie?>
. Być może masz problem z$h
12, ale (date(h)
nigdy nie będzie 13).date(G)!=$h+1
nadate(G)==$h
. Krótszy i rozwiązuje problem godzinowy;) Również wcześniej usuń średnik?>
.HH:00:00
, tj. w ciągu pierwszej sekundy pełnej godziny.Perl 6 , 60 bajtów
źródło
60²
został właśnie dodany kilka dni temuJavaScript
94 9087 bajtówNie tyle grałem w golfa ...
Wersja Downgoat:
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.
źródło
(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 bajtów
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 dowhile
pę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świetlamydary!
i powrót karetki następuje po.Godzina MATLAB opiera się na indeksowaniu 24-godzinnym, więc
mod
operacja z bazą 24 jest wymagana do obsługi rozlewania od 23:00 (23:00) do północy (00:00).Drobne uwagi
Ta
hour
funkcja wymaga zestawu narzędzi Financial Time Series.now
Funkcja nie podlega tym ograniczeniom, ale pobiera aktualną datę i czas jako numer seryjny, któryhour
w 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ć
hour
funkcję, aby wywoływaładatevec
wektor 6 elementów - po jednym dla każdego roku, miesiąca, dnia, godziny, minut i sekund. Musisz po prostu wyodrębnić czwarty element wyniku: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:
Najpierw pobiera bieżącą godzinę i datę i zapisuje ją w zmiennej,
h
a także zapisuje w zmiennej automatycznej o nazwieans
. 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
while
pę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.źródło
now
w 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ąca=@()
bit, ponieważ taki kod stanowi pełny program. Załączony kod nie wymaga również zestawu narzędzi FTS.hour
funkcji ? :-)Mathematica,
858481 bajtówźródło
C, 163 bajty
źródło
Microscript II, 45 bajtów
Wreszcie zastosowanie
D
instrukcji.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 .
źródło
TI-BASIC,
7064 bajtówPrzeklinaj te dwubajtowe małe litery!
getTime
zwraca 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ę.źródło
R - 97 bajtów
źródło
Python 3 -
9289 bajtówźródło
Python 2,
8281 bajtówZbyt 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
źródło
;
końca na końcu programu. Bez tego działa dobrze. :) Ładna odpowiedź, więc +1 ode mnie (teraz możesz komentować).Skrypt poleceń systemu Windows, 87 bajtów
To nieustannie porównuje zmienną godziny zapisaną na początku z bieżącą godziną i kończy się powodzeniem, jeśli jest inna.
źródło
Perl, 62 bajty
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:Nieoczekiwanie ta zmienna nie jest tylko do odczytu.
źródło
-E
wydaje się tutaj powszechne, więc można zaoszczędzić 5 bajtów za pomocąsay
.perl -E
zgłoszenia i języki, które mają tylko tłumacze online.-E
powinno być domyślnie dozwolone. W większości przypadków poprawa jest w każdym razie trywialna i nieciekawa.Japt ,
7261 bajtówKażda
?
reprezentuje znak niedrukowalny w Unicode. Oto jak uzyskać pełny tekst:Alternatywnie, oto (mam nadzieję, że odwracalne) zrzut heksowy:
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ę:
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 JSalert
dla wyjściowego pomiaru czasu. Mam nadzieję, że jest to dozwolone.źródło
PowerShell,
5251 bajtów-1 bajtów dzięki @ Veskah
To wyrażenie
Date|% M*e
pobiera wartość zMinute
właściwości z bieżącej wartości DateTime. Pętla kończy się, gdy jestMinute
równa 0.źródło
Python, 112 bajtów
Dość oczywiste.
źródło
Python - 159 bajtów
źródło
Mysz-2002 , 62 bajty
Wymaga od użytkownika naciśnięcia enter. Myślę.
Ok, cóż, podczas gdy bierzemy dużo bajtów i niczego nie wygrywamy, bawmy się trochę.
Próba:
Widzisz, to odliczający czas aktualizator na miejscu do następnej godziny! Dobrze wykorzystuje pętlę while, która nawet bezczynność zajmie rdzeń.
źródło
BASIC, 90 bajtów
Prosto, gra w golfa przy użyciu prefiksów typu i niejawnej
End
instrukcji. Koszt jest taki, że działa tylko w dialekcie FreeBasicfblite
.źródło
Befunge 98 -
6963 bajtówKod 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.
źródło
Galaretka ,
4847 bajtów , niekonkurująca-1 bajt dzięki Erikowi Golferowi (użyj „Leg” jako słowa w kompresji)
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 na3600
kilka sekund: konwertuje"00:00"
na,[0,0]
a następnie odejmuje to od,59
aby dać[59,59]
, konwertuje to z podstawy sześćdziesięciu na dawanie3599
, a następnie dodaje jeden dla całkowitego okresu oczekiwania wynoszącego3600
kilka 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”?
źródło
“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»
zamiast“¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷»
.Leg
(odLegen
) to również słowo :) Również ta odpowiedź jest nieprawidłowa, ponieważ zależy od obu minut i sekund00
. 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.
00:00
ponieważ 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,59
aby uzyskać,[59,59]
przekonwertować to z sześćdziesiątki podstawowej, aby uzyskać,3599
a następnie dodać jedną, aby uzyskać3600
(przetestuj, używając wersji testowej"00:00"
zamiast"59:57"
)60*(59-m)+(59-s)
musi być60*(59-m)+(59-s)+1
, po raz drugi się pojawia?sleep x seconds then return y
Poleciłbym też x / y jako lewo / prawo i po prostu powiedz - bo<dyad>@
można zdefiniować jako kolejną diadę z zamienionymi argumentami.MathGolf , 39 bajtów
Wypróbuj online!
Prawie pobity pyth ...
Wyjaśnienie
źródło
Pyth - 36 bajtów
Oczekiwanie, aż minuty będą wynosić 0 z pętlą while.
źródło
:00:00
Java, 136 bajtów
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:
źródło
QBIC , 58 bajtów
Wyjaśnienie
źródło