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


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>


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.


@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,


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ł.


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