Il 2017 è quasi qui!


17

Sfida

La sfida è semplice:

Non accettare input e produrre il seguente messaggio:

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

Un numero di volte pari al numero di ore prima o dopo la mezzanotte UTC del 31 dicembre 2016.

Esempi

Ad esempio, se sono le 19:01 UTC del 31 dicembre, dovresti produrre:

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

se sono le 23:24 UTC del 31 dicembre dovresti produrre:

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

e se è 1:42 UTC 1 ° gennaio dovresti emettere:

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

Chiarimento: se sono le 10-11pm del 31 dicembre, dovresti emetterne due, le 11-12pm del 31 dicembre emettere una, 00-01am gen 1st output one, 01-02am gen 1st 1st output ecc.

Regole

  • Nessun input
  • Le linee o gli spazi finali sono ok.
  • Il tuo programma dovrebbe funzionare in qualsiasi momento o giorno in cui lo eseguo (anche se con un grande output). Ad esempio il 2 gennaio alle 00:15 il tuo codice dovrebbe essere emesso 25 volte.

(Questa è la mia prima domanda su Code Golf, quindi se ho lasciato qualcosa di importante per favore fatemelo sapere.)

Questo è Code Golf, quindi i bit più brevi vincono


Il numero di ore è arrotondato al numero intero più vicino? Se è entro mezz'ora dalla mezzanotte di Capodanno, non dovrebbe esserci uscita?
Greg Martin,

@GregMartin Vedi la mia modifica per chiarimenti.
Spaghettificazione quantistica il

Cosa dovrebbe succedere se eseguo il programma il 3 gennaio?
betseg,

@betseg, ci ho appena pensato. Vedi modifica :). Dovrebbe funzionare allo stesso modo anche se l'output sarà di grandi dimensioni.
Spaghettificazione quantistica il

Bella prima domanda. Informazioni sull'arrotondamento: il numero di ripetizioni è il valore assoluto della differenza tra l'ora corrente UCT e le 0:00:00 del 1 ° gennaio UTC, arrotondato per eccesso. Corretta?
edc65,

Risposte:


6

JavaScript (ES6), 107

Come metodo anonimo senza parametri

Nota 1483228800000èDate.UTC(2017,0)

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

Test Questo continua ad aggiornarsi ogni 1 minuto, ma avrai bisogno di molta pazienza per vedere il cambiamento dell'output.

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 byte

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

Logica presa in prestito per soffitto da risposta di edc65 .

Python 3.5 - 116 byte

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

math.ceil restituisce un numero intero in 3.x mentre in 2.xesso restituisce un float.

Grazie elpedro per aver salvato 3 byte.


@ElPedro Grazie. Stavo per farlo, nelle mie precedenti soluzioni stavo giocando con datetime.now(pytz.utc).timestamp()Python 3.5.
Gurupad Mamadapur,


2

C compilato con Clang 3.8.1 327 317 145 byte

172 byte salvati grazie a @ edc65

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

Ungolfed

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

t=difftime(t, 1483228800)/3600;

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

317 byte

10 byte salvati grazie a @ 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");

Ungolfed

#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");
}

Aggiungerò alcune spiegazioni quando potrò.


Non sei in grado di fare n.tm_hour=n.tm_min=...=n.tm_mon=0;?
LegionMammal978,

@ LegionMammal978 Oh sì, ho dimenticato. Grazie.
Wade Tyler,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.