2017 está quase aqui!


17

Desafio

O desafio é simples:

Tomando nenhuma entrada e saída a seguinte mensagem:

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

Um número de vezes igual ao número de horas antes ou depois da meia-noite UTC de 31 de dezembro de 2016.

Exemplos

Por exemplo, se for 19:01 UTC, 31 de dezembro, você deve gerar:

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

se for 23:24 UTC 31 de dezembro, você deve gerar:

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

e se for 1:42 UTC em 1º de janeiro, você deve gerar:

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

Esclarecimento: se for 10-11pm 31 de dezembro, você deve emitir dois, 11-12pm 31 de dezembro de saída 1, 00-01am 01 de janeiro de saída 1, 01-02am 01 de janeiro de saída dois etc ...

Regras

  • Sem entradas
  • Linhas ou espaços à direita estão ok.
  • Seu programa deve funcionar a qualquer hora ou dia em que eu o executar (embora com uma saída grande). Por exemplo, em 2 de janeiro às 00:15, seu código deve gerar 25 vezes.

(Esta é a minha primeira pergunta do Code Golf, por isso, se eu tiver deixado alguma coisa importante de fora, entre em contato.)

Este é o Code Golf, então os bits mais curtos ganham


É o número de horas arredondado para o número inteiro mais próximo? Se for dentro de uma meia-hora do New-Year-meia-noite, deve haver nenhuma saída?
Greg Martin

@GregMartin Ver a minha edição para esclarecimentos.
Quantum spaghettification

O que deve acontecer se eu executar o programa em 3 de janeiro?
betseg

@betseg ye Eu apenas pensei sobre isso para. Veja editar :). Ele deve funcionar da mesma, embora a saída será grande.
Quantum spaghettification

Boa primeira pergunta. Sobre o arredondamento: o número de repetições é o valor absoluto da diferença entre o horário atual UCT e as 0:00:00 de 1º de janeiro do UTC, arredondado para cima. Corrigir?
Edc65

Respostas:


6

JavaScript (ES6), 107

Como um método anônimo sem parâmetros

Nota 1483228800000éDate.UTC(2017,0)

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

Teste Isso é atualizado a cada 1 minuto, mas você precisará de muita paciência para ver a saída mudar.

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 bytes

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

Lógica emprestada para o teto da resposta do edc65 .

Python 3.5 - 116 bytes

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

math.ceilretorna um número inteiro em 3.xque 2.xnele retorna um número flutuante.

Obrigado elpedro por salvar 3 bytes.


@ElPedro Obrigado. Estava prestes a fazer isso, nas minhas soluções anteriores eu estava brincando com o datetime.now(pytz.utc).timestamp()que exigia o python 3.5.
Gurupad Mamadapur


2

C compilado com o Clang 3.8.1 327 317 145 bytes

172 bytes salvos graças 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 bytes

10 bytes salvos graças 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");
}

Vou adicionar algumas explicações quando for possível.


Você não é capaz de fazer n.tm_hour=n.tm_min=...=n.tm_mon=0;?
usar o seguinte

@ LegionMammal978 Oh sim, eu esqueci. Obrigado.
Wade Tyler
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.