¡El 2017 ya casi está aquí!

17

Desafío

El desafío es simple:

No tomando entradas y enviando el siguiente mensaje:

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

Un número de veces igual al número de horas antes o después de la medianoche UTC del 31 de diciembre de 2016.

Ejemplos

Por ejemplo, si son las 19:01 UTC del 31 de diciembre, debe generar:

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

si son las 23:24 UTC del 31 de diciembre, debe generar:

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

y si son las 1:42 UTC del 1 de enero, debe generar:

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

Aclaración: si son las 10-11pm 31 de diciembre debe enviar dos, 11-12pm 31 de diciembre salida uno, 00-01am 1 de enero salida 1, 01-02am 1 de enero salida dos etc.

Reglas

  • Sin entradas
  • Las líneas o espacios finales están bien.
  • Su programa debería funcionar en cualquier momento o día que lo ejecuto (aunque con una salida grande). Por ejemplo, el 2 de enero a las 00:15 a.m., su código debería salir 25 veces.

(Esta es mi primera pregunta de Code Golf, así que si he dejado algo importante, hágamelo saber).

Este es Code Golf, por lo que ganan los bits más cortos

Espaguetización cuántica
fuente
¿Se redondea el número de horas al entero más cercano? Si es dentro de media hora de la medianoche de Año Nuevo, ¿no debería haber salida?
Greg Martin
@ GregMartin Vea mi edición para aclaraciones.
Spaghettification cuántica
¿Qué debería pasar si ejecuto el programa el 3 de enero?
betseg
@betseg, solo pensé en eso. Ver editar :). Debería funcionar igual aunque la salida sea grande.
Spaghettification cuántica
Buena primera pregunta. Acerca del redondeo: el número de repeticiones es el valor absoluto de la diferencia entre la hora actual UCT y las 0:00:00 del 1 de enero UTC, redondeado. ¿Correcto?
edc65

Respuestas:

6

JavaScript (ES6), 107

Como un método anónimo sin parámetros

Nota 1483228800000esDate.UTC(2017,0)

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

Prueba Esto se actualiza cada 1 minuto, pero necesitará mucha paciencia para ver el cambio de salida.

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

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

setInterval(update,60000)

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

edc65
fuente
4

Python 2 - 97 + 17 = 114 bytes

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

Lógica prestada para el techo de la respuesta de edc65 .

Python 3.5 - 116 bytes

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

math.ceildevuelve un entero en 3.xmientras que en 2.xél devuelve un flotador.

Gracias elpedro por guardar 3 bytes.

Gurupad Mamadapur
fuente
@ElPedro Gracias. Estaba a punto de hacer eso, en mis soluciones anteriores estaba jugando con lo datetime.now(pytz.utc).timestamp()que requería python 3.5.
Gurupad Mamadapur
3

Pyth - 71 68 bytes

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

Utiliza la misma lógica utilizada en mi respuesta de python 3.5.

Pruébalo aquí!

Gurupad Mamadapur
fuente
@Quantumspaghettification ¿No es esto más corto?
Gurupad Mamadapur
2

C compilado con Clang 3.8.1 327 317 145 Bytes

172 bytes guardados gracias a @ edc65

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

Sin golf

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

t=difftime(t, 1483228800)/3600;

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

317 bytes

10 bytes guardados gracias 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");

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

Agregaré algunas explicaciones cuando pueda.

Wade Tyler
fuente
¿No puedes hacer n.tm_hour=n.tm_min=...=n.tm_mon=0;?
LegionMammal978
@ LegionMammal978 Oh sí, lo olvidé. Gracias.
Wade Tyler