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


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>


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.


@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


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.