MATLAB - 89 bytes
a=@()hour(now);disp('Legen... wait for it...');while(mod(a()+1,24)~=a())end;disp('dary!')
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 um while
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, é exibido dary!
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. A now
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:
a=@()datevec(now)(4);disp('Legen... wait for it...');while(mod(a()+1,24)~=a())end;disp('dary!')
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:
disp('Legen... wait for it...');h=datevec(now);ans=h;while(mod(h(4)+1,24)~=ans(4)),datevec(now);end;disp('dary!');
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 chamada ans
. 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.