2017 jest już prawie tutaj!

17

Wyzwanie

Wyzwanie jest proste:

Nie przyjmowanie danych wejściowych i wysyłanie następującego komunikatu:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 

Liczba razy równa liczbie godzin przed lub po północy UTC w dniu 31 grudnia 2016 r.

Przykłady

Na przykład, jeśli jest 19:01 UTC 31 grudnia, powinieneś wypisać:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 

jeśli jest 23:24 UTC 31 grudnia, powinieneś wypisać:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 

a jeśli jest 1:42 UTC 1 stycznia, powinieneś wydać:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 

Wyjaśnienie: jeśli jest to 10-11pm 31 grudnia powinieneś wyprowadzić dwa, 11-12pm 31 grudnia wyjście 1, 00-01am stycznia 1 wyjście jeden, 01-02am stycznia 1 wyjście dwa itd ...

Zasady

  • Brak danych wejściowych
  • Końcowe linie lub spacje są w porządku.
  • Twój program powinien działać o każdej porze dnia, w którym go uruchomię (choć z dużą wydajnością). Na przykład 2 stycznia o 00:15 twój kod powinien wypisać 25 razy.

(To moje pierwsze pytanie do Code Golf, więc jeśli zostawiłem coś ważnego, proszę dać mi znać.)

To jest Code Golf, więc wygrywają najkrótsze bity

Spaghetti kwantowe
źródło
Czy liczba godzin jest zaokrąglana do najbliższej liczby całkowitej? Jeśli minie pół godziny przed noworoczną północą, czy nie powinno być wyjścia?
Greg Martin
@GregMartin Zobacz moją edycję w celu uzyskania wyjaśnień.
Kwalifikacja kwantowa
Co powinno się stać, jeśli uruchomię program 3 stycznia?
betseg
@betseg ye Właśnie o tym pomyślałem. Zobacz edycję :). Powinien działać tak samo, mimo że wynik będzie duży.
Kwalifikacja kwantowa
Ładne pierwsze pytanie. O zaokrąglaniu: liczba powtórzeń jest wartością bezwzględną różnicy między bieżącym czasem UCT a 0:00:00 1 stycznia UTC, zaokrągloną w górę. Poprawny?
edc65

Odpowiedzi:

6

JavaScript (ES6), 107

Jako anonimowa metoda bez parametrów

Uwaga 1483228800000jestDate.UTC(2017,0)

_=>` _     __    __
  |   |  | |   |
  |_  |__| |   |
`.repeat((Math.abs(new Date-14832288e5)+36e5-1)/36e5)

Test To aktualizuje się co 1 minutę, ale będziesz potrzebować dużo cierpliwości, aby zobaczyć zmianę wyniku.

F=_=>`_     __    __
 |   |  | |   |
 |_  |__| |   |
`.repeat((Math.abs(new Date-14832288e5)+36e5-1)/36e5)

update=_=>O.textContent=F()

setInterval(update,60000)

update()
<pre id=O></pre>

edc65
źródło
4

Python 2 - 97 + 17 = 114 bajtów

import time
print'_     __    __\n |   |  | |   |\n |_  |__| |   |\n'*int((abs(time.time()-1483228800)+3599)/3600)

Pożyczona logika dla sufitu z odpowiedzi edc65 .

Python 3.5 - 116 bajtów

import time,math
print('_     __    __\n |   |  | |   |\n |_  |__| |   |\n'*math.ceil(abs(time.time()/3600-412008)))

math.ceilzwraca liczbę całkowitą, podczas 3.xgdy w 2.xniej zwraca liczbę zmiennoprzecinkową.

Dzięki elpedro za zapisanie 3 bajtów.

Gurupad Mamadapur
źródło
@ElPedro Thanks. Już miałem to zrobić, w moich poprzednich rozwiązaniach majstrowałem przy datetime.now(pytz.utc).timestamp()wymagającym Pythonie 3.5.
Gurupad Mamadapur,
3

Pyth - 71 68 bajtów

*"_     __    __
 |   |  | |   |
 |_  |__| |   |
".Ea412008c.d0 3600

Używa tej samej logiki, co w mojej odpowiedzi w python 3.5.

Wypróbuj tutaj!

Gurupad Mamadapur
źródło
@Quantumspaghettification Czy to nie jest krótsze?
Gurupad Mamadapur,
2

C skompilowany z Clang 3.8.1 327 317 145 bajtów

172 bajty zapisane dzięki @ edc65

#include <time.h>
t;main(){time(&t);t=abs(difftime(t,1483228800)/3600);while(t--)puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");}

Bez golfa

#include <time.h>
t;
main()
{
time(&t);

t=difftime(t, 1483228800)/3600;

while(t--)
    puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");
}

317 bajtów

10 bajtów zapisanych dzięki @ LegionMammal978

#include <time.h>
t,y,w;main() {struct tm n;time(&t);n=*localtime(&t);n.tm_hour=n.tm_min=n.tm_sec=n.tm_mon=0;n.tm_mday=1;w=n.tm_year;if((w&3)==0&&((w % 25)!=0||(w & 15)==0))w=8784;else w=8760;t=(int)difftime(t, mktime(&n))/3600;t=t<w/2?t:w-t;for(;y++<t;)puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");

Bez golfa

#include <time.h>
t,y,w;
main()
{
    struct tm n;
    time(&t);

    n=*localtime(&t);

    n.tm_hour=n.tm_min=n.tm_sec=n.tm_mon=0;
    n.tm_mday=1;
    w=n.tm_year;

    if((w&3)==0&&((w % 25)!=0||(w & 15)==0))w=8784;else w=8760;

    t=(int)difftime(t, mktime(&n))/3600;
    t=t<w/2?t:w-t; 

    for(;y++<t;)
        puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");
}

Dodam kilka wyjaśnień, kiedy będę mógł.

Wade Tyler
źródło
Nie jesteś w stanie tego zrobić n.tm_hour=n.tm_min=...=n.tm_mon=0;?
LegionMammal978
@ LegionMammal978 O tak, zapomniałem. Dzięki.
Wade Tyler