2017 est presque là!

17

Défi

Le défi est simple:

Ne prenant aucune entrée et émettant le message suivant:

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

Un nombre de fois égal au nombre d'heures avant ou après minuit UTC au 31 décembre 2016.

Exemples

Par exemple, s'il est 31h01 UTC le 31 décembre, vous devez sortir:

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

s'il est 23:24 UTC le 31 décembre, vous devez sortir:

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

et s'il est 1h42 UTC le 1er janvier, vous devez afficher:

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

Clarification: s'il est 22h-23h le 31 décembre, vous devez en sortir deux, 11-12h le 31 décembre sortie un, 00-01h le 1er janvier sortie un, 01-02h le 1er janvier sortie deux etc etc ...

Règles

  • Aucune entrée
  • Les lignes ou les espaces de fin sont corrects.
  • Votre programme devrait fonctionner à tout moment ou jour où je l'exécute (bien qu'avec une sortie importante). Par exemple, le 2 janvier à 00 h 15, votre code devrait s'afficher 25 fois.

(Ceci est ma première question sur Code Golf, donc si j'ai omis quelque chose d'important, faites-le moi savoir.)

C'est Code Golf donc les bits les plus courts gagnent

Spaghettification quantique
la source
Le nombre d'heures est-il arrondi à l'entier le plus proche? Si c'est dans une demi-heure du Nouvel An-minuit, ne devrait-il y avoir aucune sortie?
Greg Martin
@GregMartin Voir ma modification pour clarification.
Spaghettification quantique
Que devrait-il se passer si j'exécute le programme le 3 janvier?
betseg
@betseg vous avez pensé à ça. Voir modifier :). Cela devrait fonctionner de la même manière, même si la sortie sera importante.
Spaghettification quantique
Belle première question. A propos de l'arrondi: le nombre de répétitions est la valeur absolue de la différence entre l'heure actuelle UCT et 0:00:00 du 1er janvier UTC, arrondie à la hausse. Correct?
edc65

Réponses:

6

JavaScript (ES6), 107

Comme méthode anonyme sans paramètres

La note 1483228800000estDate.UTC(2017,0)

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

Test Cela continue de se mettre à jour toutes les 1 minute, mais vous aurez besoin de beaucoup de patience pour voir le changement de sortie.

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

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

setInterval(update,60000)

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

edc65
la source
4

Python 2 - 97 + 17 = 114 octets

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

Logique empruntée pour le plafond de la réponse d' edc65 .

Python 3.5 - 116 octets

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

math.ceilrenvoie un entier dans 3.xalors 2.xqu'il retourne un flottant.

Merci elpedro pour avoir économisé 3 octets.

Gurupad Mamadapur
la source
@ElPedro Merci. J'étais sur le point de le faire, dans mes solutions précédentes, je jouais avec datetime.now(pytz.utc).timestamp()lequel nécessitait python 3.5.
Gurupad Mamadapur
3

Pyth - 71 68 octets

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

Utilise la même logique que celle utilisée dans ma réponse python 3.5.

Essayez-le ici!

Gurupad Mamadapur
la source
@Quantumspaghettification N'est-ce pas plus court?
Gurupad Mamadapur
2

C compilé avec Clang 3.8.1 327 317 145 octets

172 octets enregistrés grâce à @ edc65

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

Non golfé

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

t=difftime(t, 1483228800)/3600;

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

317 octets

10 octets enregistrés grâce à @ 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");

Non golfé

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

J'ajouterai quelques explications quand je pourrai.

Wade Tyler
la source
N'êtes-vous pas capable de faire n.tm_hour=n.tm_min=...=n.tm_mon=0;?
LegionMammal978
@ LegionMammal978 Oh oui, j'ai oublié. Merci.
Wade Tyler