Dary!
Em eventos totalmente não relacionados ao que, esperançosamente, acontecerá comigo nos próximos dias, encarrego você de escrever um código que faça o seguinte:
Impressão
Legen... wait for it...
imediatamente, com uma nova linha à direita.
Aguarde até a próxima hora completa (quando a tarefa cron de atribuição do emblema for executada).
Impressão
dary!
com uma nova linha à direita opcional .
Regras adicionais
Você pode escrever um programa ou uma função, mas a saída deve ser impressa em STDOUT (ou a alternativa mais próxima do seu idioma).
Você precisa esperar até a próxima hora inteira , não apenas por 60 minutos. Se o código for executado às 6:58, ele deverá imprimir a segunda linha às 7:00.
A última linha deve ser impressa no máximo um segundo após a próxima hora completa.
No caso de o programa ser iniciado no primeiro segundo de uma hora completa, ele deverá aguardar a próxima hora completa.
Você pode consultar a hora local ou UTC.
Aplicam-se as regras padrão de código de golfe .
Respostas:
Pyth,
4241Abaixo está um hexdump do código:
Guardado 1 byte graças a @isaacg
Usa a
.d
função para obter valores relacionados à hora local..d6
retorna a hora atual. Isso imprime a primeira sequência e aguarda até que a hora seja diferente da hora do início do programa e, em seguida, imprime a segunda sequência.Você pode experimentá-lo on-line com
.d7
ou.d8
por minutos / segundos, mas o compilador on-line imprime apenas qualquer coisa quando o programa termina.Parabéns, Dennis! :)
fonte
0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
.
fizesse o mesmo comprimento. Errosdary
, mas nãolegen
! E pyth afirma ser mais fácil de entender por aqueles usados para a programação convencional ...."
indica que a cadeia deve ter algumas operações realizadas sobre ele para obter a string real. É apenas um truque de compressão para jogar golfe. Se você decidir aprender Pyth, boa sorte! Não se esqueça há uma sala de chat para isso também :)JavaScript (ES6), 74 bytes
Convém alterar o relógio do sistema antes de testar, parabéns se você chegou aqui aos 59 minutos atrás.
fonte
36e5
trabalhar no lugar de3.6e6
?setTimeout
fariaeval
para mim. Verdadeiro ... Eu estava originalmente tentando usar,console.log
mas isso nem funciona quando armazenado em uma variável devido ao contexto. Você também é linda!setTimeout
corretamente e até salvar um byte:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
CJam,
4948 bytesUsa hora local. Para fins de teste, você pode substituir as duas instâncias
3
com4
ou5
para imprimi-lo no início do próximo minuto / segundo.Teste aqui. Mas observe que o intérprete online não mostra nenhuma saída até o programa terminar. Como alternativa, você pode executá-lo no Try it online , onde a saída é mostrada quase imediatamente em vez de ser armazenada em buffer (mas quando você a testar com segundos em vez de horas, o atraso será perceptível). De qualquer forma, se você o executar localmente com o interpretador Java, ele funcionará como um encanto.
Explicação
Isso faz uso de CJam,
et
que oferece uma variedade deAqui está um detalhamento do código:
Bônus
Isso também funciona para a mesma contagem de bytes:
Em vez de selecionar a hora, estamos selecionando o prefixo com a data e a hora, e continuamos o loop enquanto a matriz de data e hora ainda possui esse prefixo.
fonte
AppleScript,
157149 bytesHã. Surpreendentemente disputando.
Como as
log
impressões são feitas no painel Mensagens do Editor de Scripts, considero a saída mais próxima de STDOUT. Basicamente, se você obtiver a sequência de horas da data atual, fará algo assim:Código:
Resultado:
Ele pegará o primeiro número (
5
) antes dos dois pontos.Eu pensei que seria muito mais longo do que isso, na verdade. xD
fonte
"1"
denumber 1 in time string of(current date)
...first number in time string of (current date)
.first number
também me fornece apenas o primeiro dígito do tempo ("0"
agora, às 04:38).Boneco de neve 1.0.2 ,
7069 bytesExplicação:
fonte
PHP,
76, 70, 65, 6251 bytesLógica anterior (63b):
Esse tipo de codificação faz com que você perca seu emprego, mas faz um loop até que o tempo seja 1 hora a mais que o init.
-1 byte substituindo
{}
afer o tempo para;
(graças ao manatwork)-5 bytes substituindo
echo'dary!';
para?>dary!
(graças ao manatwork)-4 bytes substituindo
<?php
para a versão curta<?
(graças ao primo)-1 byte substituindo o
while
parafor
-3 bytes substituindo
date(G)!=$h+1
paradate(G)==$h
(obrigado primo)fonte
{}
→;
eecho
→?>
reduziriam um pouco. Embora eu prefeririaLegen... wait for it...↵<?php while(+date('is'));?>dary!
<?
vez de<?php
). O usofor(;;)
é do mesmo tamanho quewhile()
, mas permite mover a$h
atribuição, sem a necessidade de ponto e vírgula (for($h=date(h);...
). O{}
não era necessário, mas nem o;
anterior?>
. Você pode ter um problema com$h
12, no entanto (date(h)
nunca será 13).date(G)!=$h+1
paradate(G)==$h
. Mais curto e resolve o problema das horas;) Além disso, remova o ponto e vírgula antes?>
.HH:00:00
, ou seja, dentro do primeiro segundo de uma hora completa.Perl 6 , 60 bytes
fonte
60²
foi adicionado há alguns dias atrásJavascript
94 9087 bytesNão jogou tanto golfe ...
Versão do Downgoat:
Ele armazena a hora atual e faz um loop enquanto a hora "antiga" for igual à hora atual. Assim que a hora mudar, o restante será impresso! : D
Isenção de responsabilidade: se o seu navegador não gostar, você foi avisado.
fonte
(a=alert)`Legen... wait for it...`,l=new Date,z=(b=l.getHours)();for(;z==b(););a`dary!`
(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
MATLAB - 89 bytes
Bastante auto-explicativo. Primeiro, crie um identificador de função para pegar a hora atual do relógio do sistema. Em seguida, exiba
Legen... wait for it...
com um retorno de carro e, em seguida, entramos em umwhile
loop em que continuamos verificando se a hora atual adicionada com 1 não é igual à hora atual. Se for, continue em loop. Somente até o instante em que a próxima hora acontece, é exibidodary!
e um retorno de carro ocorre depois.A hora do MATLAB é baseada na indexação de 24 horas, portanto, a
mod
operação com a base 24 é necessária para lidar com derramamentos de 23:00 (23:00) até meia-noite (00:00).Nota menor
A
hour
função requer a caixa de ferramentas Financial Time Series. Anow
função não está sujeita a essa restrição, mas recupera a data e a hora atuais como um número de série que,hour
portanto, utiliza para calcular a hora atual.Deseja executar isso no Octave?
Certo! Como o Octave não possui essa caixa de ferramentas, basta modificar a
hour
função para que ela chame,datevec
retornando um vetor de 6 elementos - um para cada ano, mês, dia, hora, minutos e segundos. Você apenas precisaria extrair o quarto elemento da saída:Os caracteres adicionais fazem a solução subir para 98 bytes, mas você poderá executá-lo no Octave. Observe a indexação no local sem uma variável temporária no identificador da função.
Nenhuma caixa de ferramentas de séries temporais financeiras?
Se você deseja executar isso no MATLAB sem a Financial Time Series Toolbox, porque não é possível indexar as variáveis imediatamente sem a temporária, isso levará um pouco mais de bytes para escrever:
Isso primeiro obtém a hora e a data atuais e as armazena na variável
h
, além de armazená- las na variável automática chamadaans
. Depois, continuamos repetindo e verificando se a hora atual não é igual à próxima hora. A cada iteração, continuamos atualizando a variável automática com a hora e a data atuais. Assim que a próxima hora corresponder à hora e data atuais, exibiremos a última parte da sequência e sairemos. Isso eleva a contagem de bytes para 114.Observe também que você não pode tentar isso online. Os intérpretes da Oitava on-line terão um limite de tempo para a execução do código e, como esse é um
while
loop aguardando a próxima hora, você receberá um tempo limite enquanto aguarda a execução do código. A melhor coisa que você pode fazer é executá-lo em sua própria máquina e verificar se funciona.fonte
now
no loop while:a=@()disp('Legen... wait for it...');while floor(mod(now*86400,3600))end;disp('dary!')
. Você também pode salvar mais 5 bytes removendo oa=@()
bit, pois o código constitui um programa completo. O código anexado também não requer a caixa de ferramentas do STF.hour
função Financial Toolbox ? :-)Mathematica,
858481 bytesfonte
C, 163 bytes
fonte
Microscript II, 45 bytes
Finalmente, um uso para a
D
instrução.Imprime a primeira string, leva repetidamente o tempo UTC no módulo de milésimos de segundo 3.600.000 até que isso produz 0 e, em seguida, produz a segunda string que é impressa implicitamente. Os 3.600.000 são representados no código como 36x10 5 .
fonte
TI-BASIC,
7064 bytesAmaldiçoe essas letras minúsculas de dois bytes!
getTime
retorna uma lista de três elementos{hours minutes seconds}
; portanto, a soma do 1º ao 1º é as horas. Quando há uma diferença entre as horas no início e as horas atuais, o loop termina. Obrigado a @FryAmTheEggman por esta observação.fonte
R - 97 bytes
fonte
Python
3-9289 bytesfonte
Python 2,
8281 bytesUma reputação muito baixa para comentar. Versão Python 2 da solução de Alexander Nigl. Salva os caracteres perdidos entre colchetes. Além disso, 3600 não são necessários no cálculo do tempo de suspensão.
7 caracteres salvos no geral.
Edit: -1 byte graças a @Kevin Cruijssen
fonte
;
no final do programa. Parece funcionar bem sem ele. :) Boa resposta, portanto, +1 de mim (agora você pode comentar).Script de comando do Windows, 87 bytes
Isso compara continuamente uma variável de hora armazenada no início com a hora atual e é bem-sucedida se diferente.
fonte
Perl, 62 bytes
A variável especial
$^T
(aka$BASETIME
) registra o número de segundos desde a época em que o script foi iniciado. Felizmente, os segundos bissextos não são contados no total, de modo que o seguinte seja equivalente:Surpreendentemente, essa variável não é somente leitura.
fonte
-E
parece comum aqui, você pode salvar 5 bytes usandosay
.perl -E
envios e idiomas que possuem apenas intérpretes online.-E
deva ser permitido por padrão. Na maioria dos casos, a melhoria é trivial e desinteressante.Japt ,
7261 bytesCada
?
um representa um caractere não imprimível Unicode. Veja como obter o texto completo:Como alternativa, aqui está um hexdump (provavelmente reversível):
Esse código é baseado na resposta JavaScript de George Reith , com algumas alterações específicas do Japt. Descobri outro dia que, se você compactar o código e inseri-lo em uma string embrulhada em um bastão, ele será descompactado automaticamente. Veja como é processado através da compilação:
Em JS, um par de parênteses retornará o último valor interno; portanto, esse código define o evento cronometrado e retorna a
'Legen...'
string, que é automaticamente enviada para STDOUT. Como o Japt atualmente não tem como adicionar conteúdo ao STDOUT além da saída automática na compilação, usei a função vanilla JSalert
para a saída temporizada. Espero que isso seja permitido.fonte
Powershell,
5251 bytes-1 byte thanks @Veskah
Essa expressão
Date|% M*e
obtém valor daMinute
propriedade do valor Current DateTime. O loop termina quandoMinute
igual a 0.fonte
Python, 112 bytes
Bastante auto-explicativo.
fonte
Python - 159 bytes
fonte
Mouse-2002 , 62 bytes
Requer que o usuário pressione enter. Eu acho que.
Ok, bem, enquanto estamos pegando muitos bytes e não ganhando nada, vamos nos divertir um pouco.
Amostra:
Veja, é um cronômetro de contagem regressiva no local atualizado para a próxima hora! Ele faz bom uso do loop while, que, mesmo sem fazer nada, ocupará um núcleo.
fonte
BASIC, 90 bytes
Simples, jogou golfe usando os prefixos de tipo e a
End
instrução implícita . O custo é que ele funciona apenas no dialeto FreeBasicfblite
.fonte
Befunge 98 -
6963 bytesO código contém um caractere não imprimível (representado por
<ETB>
como não imprimíveis não parece aparecer em blocos de código). Seu código de caractere é 23 (um caractere de bloco de transmissão final ).Aviso: O código anterior será executado em um loop ocupado, com a pilha aumentando a cada repetição e, portanto, pode consumir grandes quantidades de memória.
fonte
Gelatina ,
4847 bytes , não concorrente-1 byte graças a Erik, o jogador de golfe (use "Leg" como uma palavra na compactação)
TryItOnline! ou execute uma versão de teste com uma cadeia de caracteres formatada por tempo codificada de
“59:57”
("mm: ss").O primeiro commit de Jelly foi feito por Dennis apenas alguns dias após ele ter criado esse desafio. Não sei em que data esse código teria funcionado pela primeira vez, mas, de qualquer forma, não é concorrente.
No momento da escrita, existe apenas uma maneira de acessar a hora que é por meio de uma string formatada
ŒT
,.Este código calcula quanto tempo esperar e depois dorme. Se chamado,
hh:00:00
ele espera por3600
segundos: ele converte"00:00"
para[0,0]
subtrai o valor de59
para render[59,59]
, converte isso da base sessenta para dar e3599
, em seguida, adiciona um por um período de espera total de3600
segundos.Talvez um loop possa ser feito; ou uma string compactada usando a palavra inteira "Legendary" poderia ser utilizada de alguma forma?
fonte
“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»
vez de“¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷»
.Leg
(fromLegen
) também é uma palavra :) Além disso, esta resposta é inválida, pois depende dos minutos e segundos sendo ambos00
. Em4ŒT
vez disso, você deve fazer alguma coisa , pois existe uma regra queIn the event that the program is started in the first second of a full hour, it should it wait for the next full hour.
00:00
pois não está testando para essa condição - calcula quantos segundos até o próximo"00:00"
e aguarda. Portanto, seria converter"00:00"
para[0,0]
subtrair59
ao rendimento[59,59]
converter que a partir de base de sessenta para chegar3599
e, em seguida, adicionar um para obter3600
(testá-lo usando a versão de teste com"00:00"
no lugar de"59:57"
)60*(59-m)+(59-s)
deve ser60*(59-m)+(59-s)+1
, na segunda vez que aparece?sleep x seconds then return y
- porque<dyad>@
pode ser definido como outra díade com argumentos trocados.MathGolf , 39 bytes
Experimente online!
Quase venceu pyth ...
Explicação
fonte
Pitão - 36 bytes
Espera até que os minutos sejam 0 com um loop while.
fonte
:00:00
Java, 136 bytes
Quantos milissegundos passaram desde a última hora completa é o resultado de
System.currentTimeMillis()
mod 3.600.000.O programa monolítico equivalente tem 159 bytes:
fonte
QBIC , 58 bytes
Explicação
fonte