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 ncomo entrada, produzirá um novo programa / função que faz o seguinte:
- Os
nsegundos 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
nsegundos (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 ABCe a entrada seja 60segundos:
ABCe 60saí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
60segundos 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:25na 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
nsegundos deveriam ter passado. Portanto, se a entrada é60e a hora de início foi12:00:00,12:01:00ela ainda emitirá o programa v2, mas12:01:01será 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.