Desafio:
Crie um programa ou função que aceite uma entrada inteira, que emita um novo programa / função, conforme especificado abaixo.
Entrada:
Inteiro n
: Tempo em segundos antes da bomba-relógio explodir.
Resultado:
O programa original que teve o tempo em segundos n
como entrada, produzirá um novo programa / função que faz o seguinte:
- Os
n
segundos se passaram desde que o programa anterior foi executado? ImpressãoBOOM!
- Senão: Imprima um programa / função que, quando executado, redefine o timer para
n
segundos (e age da mesma forma que o primeiro programa / função emitido).
NOTA: Não é exatamente o mesmo que o primeiro programa / função emitido (pelo menos na maioria dos idiomas), porque o horário de início mudou (veja o exemplo de esclarecimento abaixo).
Exemplo de pseudocódigo:
Digamos que o programa original seja ABC
e a entrada seja 60
segundos:
ABC
e 60
saídas DEF(60)
.
- Se
DEF(60)
for executado dentro de 60 segundos, será exibidoDEF_G(60)
, que age exatamente da mesma formaDEF(60)
, mas com uma nova hora de início. - Se
DEF(60)
for executado após 60 segundos, será emitidoBOOM!
.
Exemplo de esclarecimento, o que quero dizer com 'horário de início':
- O programa base com
60
segundos de entrada é executado em12:00:00
. Emite o primeiro programa de saída com um horário de início de12:00:00
. - Este primeiro programa de saída com horário de início
12:00:00
é executado em12:00:45
. Ele gera um segundo programa de saída com um horário de início de12:00:45
. - Este terceiro programa de saída com um horário de início
12:00:45
é executado em12:01:25
. Ele gera um quarto programa de saída com um horário de início de12:01:25
. - Este quarto programa de saída com um horário de início
12:01:25
é executado em12:05:00
. Ele irá produzirBOOM!
.
Observe como a primeira saída seria impressa BOOM!
depois 12:01:00
, mas o programa de saída progrediu, mesmo estando 12:01:25
na etapa 3, ele ainda emitirá o próximo programa em vez de BOOM!
(porque os programas de saída de saída têm horários de início além do primeiro programa de saída) .
Regras do Desafio:
- Regras de quine padrão se aplicam.
- Pelo menos
n
segundos deveriam ter passado. Portanto, se a entrada é60
e a hora de início foi12:00:00
,12:01:00
ela ainda emitirá o programa v2, mas12:01:01
será emitidaBOOM!
. - Os programas de saída não receberão nenhuma entrada ( exceto um parâmetro vazio não utilizado, se for mais curto ). O horário de início deve ser atribuído aos próximos programas como valor 'codificado' (é por isso que a saída de um programa de saída não é exatamente a mesma que a anterior (na maioria dos idiomas).
- Somente o tamanho do seu programa / função principal é contado em termos de bytes.
- Você pode emitir o programa / função como string (ou formato razoável comparável, como byte / matriz de caracteres / lista), como função se o seu idioma suportar isso ou outros formatos razoáveis (pergunte se você não tem certeza).
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.