Cóż, nastąpił Brexit . A Sky News, będąc geniuszami, postanowiły stworzyć odliczanie na boku autobusu.
Twoim zadaniem jest zrobić coś podobnego. Wielka Brytania opuszcza UE w dniu 31 marca 2019 roku i musisz utworzyć cyfrowe odliczanie, które zmienia się co sekundę (z dopuszczalnym odchyleniem 0,05 sekundy).
Wkład
Twój program nie powinien przyjmować żadnych danych wejściowych. To jest zakazane!
Wydajność
Powinien on wyświetlać czas do Brexitu w formacie ddd:hh:mm:ss
. Wiodące i końcowe znaki nowej linii są dozwolone, ale wyświetlacz powinien pozostać w tym samym miejscu za każdym razem. Powinno to wyglądać, jakby faktycznie maleje na swoim miejscu. Jak zauważył @AnthonyPham, nie oznacza to drukowania wystarczającej liczby znaków nowego wiersza, aby „wyczyścić” ekran, oznacza to, że należy go wyczyścić.
Takie dane wyjściowe nie są dozwolone:
100:20:10:05
100:20:10:04
To też nie jest
100:20:10:05
*A thousand newlines*
100:20:10:04
ponieważ znajdują się w więcej niż jednej linii.
Po Brexicie nie musisz się martwić. Twój program musi działać tylko do 31.03.2019
Zasady
- Standardowe luki są niedozwolone
- To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach .
- Komunikaty o błędach (choć nie wiem, jak to zrobić) są niedozwolone
- Kod powinien być uruchomiony za 2 lata (kiedy Wielka Brytania opuści UE) i powinien wyświetlać aktualny czas i nie zaczynać od 730 (patrz poniżej)
Reguła odliczania
Odliczanie nie powinno być zakodowane na stałe i powinno być możliwe uruchomienie w dowolnym momencie przed zakończeniem Brexitu i nadal dawanie prawidłowego wyniku. Po rozpoczęciu nowego dnia godzina powinna być zgodna z poniższym formatem
712:00:00:01
712:00:00:00
711:23:59:59
Powiem jeszcze raz: data zakończenia Brexitu to 31.03.2019 o północy dla wygody (31: 3: 19 00:00:00 lub 31: 3: 2019 00:00:00 lub w dowolnym innym formacie)
NB: Wydaje mi się, że mam wszystko, ale nie opublikowałem tego w piaskownicy, w przeciwnym razie czas mógłby się skończyć. Możesz dodawać sugestie dotyczące ulepszeń, ponieważ nie są one idealne.
1000
jeśli chcę to zmienić raz na sekundę. DziękiOdpowiedzi:
JavaScript,
134129113 bajtówEdycja: Zapisano 2 bajty dzięki @Shaggy. Zaoszczędzono 11 bajtów dzięki @ l4m2.
źródło
<a id=0>
? Czy jakoś tak?document.body.innerHTML
zamiasto.innerHTML
<tt>
.PowerShell,
70635553 bajtówWyłączone podwójne cytaty, łatwe -2 dzięki @Joey
Uruchomienie tego ze snem dodaje 8 bajtów, ale dane wejściowe są w większości niewidoczne, jeśli są uruchamiane bez nich, wersja (63 bajty) ze snem:
for()
jest nieskończoną pętlą i wewnątrz tej pętli ..cls
wyczyścić ekran,pobierz
31/3/19
jakoDateTime
obiekt i-
bieżącą datę z niego, aby podać pozostały czas, a następnie.ToString()
(|% T*
) ten w odpowiednim formacie.wyświetli się czas ujemny po brexicie.
źródło
T*
działa. Nie znam tego.%
foreach rzeczywiście podnosiT
obiekt oString i przyjmuje jako argument kolejny ciąg znaków. jeśli chodzi o format daty i godziny, dlaczego nie będzie działać na komputerach w USA? Myślałem, żedd
itp. Są niewrażliwe na kulturę.3/31/19
. Działa również2019-03-31
wszędzie, ale kosztuje to kilka bajtów.31Mar19
zamiast31/3/19
którego mam nadzieję to naprawić?Excel VBA,
918482 bajtówOszczędność 7 bajtów dzięki JoeMalpass wskazując, że Excel widzi daty jako liczby.
Zaoszczędzono 2 bajty dzięki JoeMalpass
Dane wyjściowe są wysyłane do komórki
A1
w aktywnym arkuszu Excel.źródło
("2019-3-31")
z(43555)
. Gdy próbuję uruchomić to w programie Excel, jednak zawiesza się po około 5-6 sekundach ...Now
działa bez()
zbyt ...Python 3.6, 146 bajtów
źródło
C #,
173172156150127 bajtówZaoszczędzono 16 bajtów dzięki @Bob Zaoszczędzono 6 bajtów dzięki @ Søren D. Ptæus
Wersja sformatowana:
źródło
(TimeSpan)0
? Na telefonie nie można teraz testować. Nadal możesz upuścić wolną przestrzeń, gdy zajmuje się nią powrót karetki: ustawia kursor z powrotem na początku linii.Clear
! Głupi ja. I nie można przekonwertowaćint
naTimeSpan
już próbowałem tego.(t = new DateTime(2019, 3, 31) - DateTime.Now).Ticks > 0
.JavaScript ES5,
320319316305295284 bajtówDzięki @Fels za referencje
Math
, @dgrcode za referencjeconsole
Nie grał w golfa
źródło
g=Math;
Math
może nadal zaoszczędzić 2 bajty, prawda?var
. Wybierz też krótsze nazwy zmiennych, takie jakh
zamiasthours
lubm
zamiastminutes
. Prawdopodobnie robieniec=console
zaoszczędzi jeszcze kilka bajtów. Również1e3
zamiast1000
PHP, 84 bajty
Dość bezpośredni. 1553990400 to znacznik czasu 31-3-2019 00:00:00 w UTC. Pętla wykonuje się w nieskończoność, używając funkcji DateTime-> diff () -> format () w celu wyświetlenia pozostałego czasu. Po zdarzeniu Brexit zacznie liczyć od 0.
Skomentowana / bardziej czytelna wersja:
źródło
<?
tutaj pominąć tag? 2. Myślę, że twój nawias jest błędny, teraz wywołujesz->diff
echo, a nie obiekt DateTime. 3. echo i tak działa bez nawiasów. 4. Nawet po rozwiązaniu tego problemu to nie działa, ale jestem nowy w golfie, więc to może być ja, jestem idiotą.CJam,
69625957 bajtówZaoszczędzono 7 bajtów, zmieniając format na inny czas
Zaoszczędzono 3 bajty dzięki sugestiom Martina Endera
Zaoszczędzono 2 bajty, używając znaku powrotu karetki zamiast spacji
Nie można uruchomić z TIO z oczywistych powodów.
Ciągle przepisuje wyświetlacz w nieskończonej pętli, więc tekst miga do przodu i do tyłu (przynajmniej w mojej konsoli), chociaż faktycznie aktualizuje czas tylko raz na sekundę.
Ta 70-bajtowa wersja drukuje tylko raz na sekundę:
Wyjaśnienie
źródło
Ab
zes
i zapisać bajt wykonując1e3/
najpierw, a następnie podzielić w kolejności przeciwnej60md\60md\24md\]W%
.{60md\}2*
ratuje innego.Python 3.5 (118 bajtów)
źródło
C # 6, 149 bajtów
Dzięki Bobowi za oszczędność 57 bajtów!
Nieogrodzony program:
C #,
210206159 bajtówDziękujemy Bobowi za uratowanie kolejnych 47 bajtów!
Dzięki Martin Smith za zapisanie 4 bajtów!
Nieogrodzony program:
źródło
new DateTime(2019,3,31)
jest krótszy.Console.Clear
i” zamiast"\r"
niego, np."\r"+(x-a)...
(x-a).ToString(@"d\:hh\:mm\:ss")
jest równoważne z `String.Format (" \ r {0: d \\: hh \\: mm \\: ss} ", xa)` jest równoważne$@"{x-a:d\:hh\:mm\:ss}"
(krótszy, interpolowany ciąg w C # 6.0). Jeśli to zrobisz, możesz dalej skrócić pełny"\r"+$@"{x-a:d\:hh\:mm\:ss}"
do$"\r{x-a:d\\:hh\\:mm\\:ss}"
.C, 104 bajty
Awaria
Polega na
time
zwracaniu liczby sekund od 01.01.1970, co jest w moim przypadku (przy użyciu Clang / GCC na macOS) i powinno tak być w przypadku większości rzeczy w systemie UNIX.Używa sekwencji ucieczki terminala
bashdo przesuwania kursora (<esc>[1A
przesuwa kursor w górę o 1 linię). Byłoby fajniej móc po prostu użyć\r
, aleprintf
nie spłukuje się, dopóki nie zobaczy nowej linii, a ręczne opróżnienie zajmuje znacznie więcej.Prawdopodobnie najbardziej intensywne odliczanie procesora, jakie kiedykolwiek widziałem. Działa w gorącej pętli, aby upewnić się, że zawsze jest tak dokładna, jak to tylko możliwe. Jeśli zostanie uruchomiony po terminie, przyniesie trochę dziwnych rzeczy (wszędzie negatywy!)
źródło
main(x)
nie jest poprawną formą main, domyślna int została usunięta z języka. Uważam, że minimalna, bezpieczna wersja toint main(){}
.AHK , 145 bajtów
To nie jest najkrótsza odpowiedź, ale wynik daje bardzo miłe poczucie zagłady. Początkowo próbowałem wysłać naciśnięcia klawiszy Ctrl+, Aa DELnastępnie, niezależnie od pory, ale częstotliwość odświeżania była zbyt wolna i zniszczyłoby to środowisko, w którym się znajdowałeś. Zamiast tego poszedłem z GUI. Okazało się, że potrzeba mniej bajtów, aby całkowicie zniszczyć okno i odtworzyć je, niż w kółko aktualizować kontrolę, więc poszedłem z tym. To fajny efekt.
źródło
C #,
128127 bajtówNieskluczony kod:
Nie wymyśliłbym tej sztuczki bez pomocy innych odpowiedzi C # tutaj.
Dla każdego, kto szuka dalszej poprawy, możesz również umieścić wyrażenie Write () wewnątrz pętli for. Wydaje się, że powinienem być w stanie tutaj zapisać bajt, ponieważ oszczędza mi to średnika dla tego wyrażenia, ale działa na ten sam numer, ponieważ nie możesz mieć całkowicie pustego ciała:
źródło
Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:ddd\\:hh\\:mm\\:ss}");
ddd
wypełnia zera, wygląda lepiej niż metoda dwóch spacji.Rubinowy (83 bajty)
Nie golfił
Zasadniczo jedno z zgłoszeń w języku Python, z pewnymi ulepszeniami. Po prostu emitujemy „\ r”, aby przejść do początku łańcucha przed ponownym renderowaniem. A w przypadku formatu ciągu
"%03d:%02d:%02d:%02d"
naprawdę nie dbamy o szerokość pierwszego specyfikatora… więc możemy to zrobić"%02d"*4
i wyemitować backspace i spację, aby usunąć dodatkowe niepotrzebne dwukropki.Również znalazłem dwóch znaków krótszy
print
:$><<
.$>
jest skrótem dla globalnego$defout
, który jest strumień wyjściowy dlaprint
aprintf
i domyślnieSTDOUT
.IO#<<
zapisuje prawą stronę do strumienia. Jak te dwie postacie są krótsze? Cóż, mogę teraz pominąć przestrzeń, która prowadziła przed nawiasami owijającymi ciąg formatu.W tym momencie naprawdę myślę, że nie ma możliwości dalszego skrócenia tego programu w Ruby.
Edycja: Myliłem się. Zamiast pierwsze
Time.new(2019,3,31)
, możemy po prostu użyć czasu surowego UNIX:1553990400
.Edycja 2: Próbowałem bawić się z wyliczaniem minut i dzieleniem znacznika czasu UNIX przez tę stałą, ale tak naprawdę nie kończy się to oszczędzaniem bajtów. :(
Edycja 3: Okazało się, że buforowanie
h=3600
faktycznie zraniło mnie o dwa bajty. UpsEdycja 4: Zaoszczędź 3 bajty dzięki @EricDuminill. Używał pływaków, ale racjonalne działały bez utraty precyzji!
Edycja 5:
Array#*
jako alias dlaArray#join
Ruby?
-syntax dla poszczególnych postaci!źródło
loop{h=431664-Time.now.to_f/3600;$><<('%02d:'*4+"\b \r")%[h/24,h%24,h%1*60,3600*h%60]}
Sekundy mogą być wyłączone o 1, z powodu zaokrąglania.to_r
zamiastto_f
zachować precyzję..to_r
.to_f
+"\r"
na prawo od tablicy. Umożliwia to użycie['%02d']*4*?:
zamiast tego'%02d:'*4+"\b "
, abyś mógł stracić nawiasy, które dają ci jeden bajt. Zapisz kolejny bajt pisząc+?\r
zamiast+"\r"
.JavaScript + HTML, 136 + 7 = 143 bajty
źródło
C #, 142 bajty
Nieogrodzony program:
źródło
ToString()
bajtów i zamiast tego wbudowanie formatowania w metodę Write () lub może interpolowany ciąg znakówgoto
pomysł.Data Bash + GNU, 128 bajtów
2 bajty wygolone dzięki @muru, a 2 wcześniejsze dzięki @This Guy.
Nie golfił
źródło
while[1]
?line 1: [1]: command not found
błąd. Wydaje się, że spacje są obowiązkowe :-(3600
do zmiennej, aby zapisać 2 bajty? Może również być w stanie zmienićB=3600;A=86400
doB=3600;A=24*B
innego bajtu?A=$[24*B]
takiej możliwościC=:%02d;printf "%03d$C$C$C\r"
zapisać bajt? I przenieś zadania do A i B w kontekście arytmetycznym:D=$[B=3600,A=24*B,1553990400-`date +%s`]
aby zapisać inny?MATL, 45 bajtów
TIO najwyraźniej nie obsługuje czyszczenia danych wyjściowych, ale na szczęście MATL Online tak !
Przy 2 bajtach więcej, nieco bardziej przyjazna dla procesora wersja, która wykonuje
pause
(uśpienie) co sekundę:Wypróbuj to w MATL Online
737515
„31 marca 2019 r.” reprezentuje domyślny format epoki MATLAB - liczbę dni od 0 stycznia 0000, opcjonalnie włączając część ułamkową reprezentującą porę dnia. (Próbowałem to skrócić, obliczając to w jakiś sposób, ale jego jedynymi czynnikami są 5 i kolejna sześciocyfrowa liczba (147503) i nie mogłem znaleźć sposobu na zrobienie tego w mniej niż 6 bajtów.)źródło
PHP, 64 bajty
Będzie to liczyć dokładnie do momentu,
0:00:00:00
a następnie przerwa / wyjście. Uruchom z-r
.-2 bajty, gdybym nie musiał drukować 0.
źródło
RPL,
8378 bajtówZakładając, że HP48 lub podobny jest skonfigurowany z poprawną (brytyjską) godziną i datą, formatem daty mm / dd i formatem 24-godzinnym:
Byłem zaskoczony, że mogłem zaoszczędzić 2 bajty, usuwając spacje wokół
":"
. 1.1 to najkrótsza ważna data, później zrzucona przezSUB
. Uważaj na emulatory, czas może biegać szybciej lub wolniej (lub wcale) niż zegar ścienny. Z prawdziwym HP możesz zatrzymać ten program, naciskając klawisz ON… lub poczekać na rozładowane baterie.źródło
PHP,
1029590 bajtówZaoszczędź 7 bajtów dzięki @TheLethalCoder i nie faktorując
Zaoszczędzono kolejne 5 bajtów, łącząc
To jest mój pierwszy golf, więc prawdopodobnie brakuje mi kilku trików, ale tutaj jesteś niezależnie.
Jeśli chodzi o odpowiedź PHP @chocochaos, która w innym przypadku przebije to, uważam, że jest błędna z powodów, które wyjaśniłem w moich komentarzach, ale ponieważ jestem tu nowy, mogę się mylić.Albo jestem tylko nowicjuszem :)źródło
$a
raz, więc równie dobrze możesz użyć numeru na miejscu. Nie jestem zbyt zaznajomiony z php, ale wygląda na to, że może być więcej ulepszeńflawed because of reasons stated in the comments
? Jeśli masz na myśli komentarze do ich odpowiedzi, jesteś jedynym, który skomentował.<?=
otwierającego znacznika i upuszczając echo, przypisując$b
miejsce, w którym po raz pierwszy go używasz. Dodatkowo możesz zapisać 3 bajty używając^0
zamiastfloor
. Jest to bitowe lub obejmuje rzutowanie na int, to najkrótszy sposób na rzutowanie na int, jaki widziałem.AWK , 78 bajtów
Wypróbuj online!
Minęło więcej czasu, zanim zdałem sobie sprawę, że mogę wstępnie obliczyć czas zakończenia. Czasami opłaca się nieco spóźnić do gry i czerpać pomysły od innych.
Do Twojej wiadomości, link TIO nie działa zbyt dobrze, ponieważ nie jest
\r
poprawnie wdrażany .źródło
F #, 142 bajty
Dorastałem w Irlandii, około pół kilometra od granicy. Oprócz znaku „Welcome to Fermanagh” i zmieniających się znaków drogowych nie wiedziałbyś, że wjechałeś do innego kraju. Służyłem do dwukrotnego przekroczenia go w drodze do szkoły.
źródło
c, gcc 114 bajtów
Nic nie pominięto, pełny program. Program kompiluje się w gcc na Ubuntu. Odliczanie nie pokaże długiej ścieżki instrukcji drukowania z powodu wywołania systemowego do wyczyszczenia i zatrzymuje się, gdy odliczanie osiągnie 0 sekund.
UnGolfed
źródło