Desafío:
Cree un programa o función que tome una entrada entera, que genere un nuevo programa / función como se especifica a continuación.
Entrada:
Entero n
: tiempo en segundos antes de que explote la bomba de tiempo.
Salida:
El programa original que tenía el tiempo en segundos n
como entrada, generará un nuevo programa / función que hace lo siguiente:
- ¿
n
Han pasado segundos desde que se ejecutó el programa anterior? ImpresiónBOOM!
- De lo contrario: imprima un programa / función que, cuando se ejecuta, restablece el temporizador a
n
segundos (y actúa igual que el primer programa / función emitido).
NOTA: No es exactamente lo mismo que el primer programa / función de salida (al menos en la mayoría de los idiomas), porque la hora de inicio ha cambiado (consulte el ejemplo de aclaración a continuación).
Ejemplo de pseudocódigo:
Digamos que el programa original es ABC
y la entrada es 60
segundos:
ABC
y 60
salidas DEF(60)
.
- Si
DEF(60)
se ejecuta dentro de los 60 segundos, saldráDEF_G(60)
, que actúa exactamente igualDEF(60)
, pero con un nuevo tiempo de inicio. - Si
DEF(60)
se ejecuta después de 60 segundos, saldráBOOM!
.
Ejemplo de aclaración a lo que me refiero con 'hora de inicio':
- El programa base con
60
segundos de entrada se ejecuta en12:00:00
. Emite el primer programa de salida con un tiempo de inicio de12:00:00
. - Este primer programa de salida con hora de inicio
12:00:00
se ejecuta en12:00:45
. Produce un segundo programa de salida con un tiempo de inicio de12:00:45
. - Este tercer programa de salida con un tiempo de inicio
12:00:45
se ejecuta en12:01:25
. Produce un cuarto programa de salida con un tiempo de inicio de12:01:25
. - Este cuarto programa de salida con un tiempo de inicio
12:01:25
se ejecuta en12:05:00
. Es la salidaBOOM!
.
Tenga en cuenta cómo se imprimirá la primera salida BOOM!
después 12:01:00
, pero el programa de salida ha progresado, por lo que a pesar de que está 12:01:25
en el paso 3, seguirá emitiendo el siguiente programa en lugar de BOOM!
(porque los programas de salida de salida tienen tiempos de inicio más allá de ese primer programa de salida) .
Reglas de desafío:
- Se aplican las reglas predeterminadas de quine.
- Al menos
n
segundos deberían haber pasado. Entonces, si la entrada es60
y el tiempo de inicio fue12:00:00
,12:01:00
todavía emitirá el programa v2, pero a12:01:01
la salidaBOOM!
. - Los programas de salida no tomarán ninguna entrada ( excepto un parámetro vacío no utilizado si es más corto ). El tiempo de inicio se debe dar a los siguientes programas como valor 'codificado' (por lo que la salida de un programa de salida no es exactamente la misma que la anterior (en la mayoría de los idiomas).
- Solo el tamaño de su programa / función principal se cuenta en términos de bytes.
- Puede generar el programa / función como cadena (o formato razonable comparable, como byte / matriz de caracteres / lista), como función si su idioma admite este u otros formatos razonables (pregunte si no está seguro).
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Respuestas:
JavaScript, 51 bytes
Prueba en navegador
versión antigua
Prueba en navegador
fuente
return()=>
. Y aunque casi nunca programo en JavaScript, verifiqué su script de prueba e incluso lo modifiqué agregando una prueba para la función de salida de función: Pruébelo aquí con la cuarta prueba de función de función. Todo parece funcionar, y es sorprendentemente corto, podría agregar, así que +1 de mi parte. PD: En las reglas que indicaba, debería generar una cadena en lugar de una función. Pero cambiaré un poco las reglas para permitir ambas. ¿Podría modificar el script para que también muestre las funciones para registrar durante la prueba?f=(t,o=setTimeout(_=>o=0,t*1e3))=>_=>o?f(t):'BOOM!'
debería funcionarJavaScript, 53 bytes
Mostrar fragmento de código
Respuesta anterior (el regreso debe ser una cadena)
JavaScript, 78 bytes
Mostrar fragmento de código
fuente
Java 8, 234 bytes
Lamento publicar mi propio desafío de inmediato. Se entiende principalmente como una aclaración adicional del desafío, y dudaba si agregarlo a la pregunta en sí o publicarlo como respuesta (y decidí publicarlo como una respuesta para no saturar la publicación del desafío).
Y aunque me gustaría decir que también es algo para (intentar y) vencer, eso ni siquiera vale la pena mencionar porque, bueno ... Java (casi) siempre es golpeado. ;pags
Pruébalo en línea.
Salida de ejemplo:
Pruebe la función lambda de salida aquí.
Salida de ejemplo:
Explicación:
La función principal toma una entrada entera y devuelve una cadena. Básicamente, devuelve una función que es una quine, con la entrada entera y el tiempo de inicio (en segundos como marca de tiempo) como valores codificados.
Función principal:
n=60
se utilizó en los siguientes ejemplos:Primer programa de salida:
Segundo programa de salida:
Lo mismo que el primer programa de salida, excepto que
70492.687613232
se reemplaza con70548
.fuente
Perl 5 +
-p
, 88 bytesLos programas de salida deben ejecutarse con
-M5.010
forsay
, pero no con-p
.Pruébalo en línea!
fuente
05AB1E , 50 bytes
Definitivamente se puede jugar un poco más, pero es bastante complicado generar un semi-quine que genera un programa de quine con valores modificados.
Pruébelo en línea o pruebe con una ejecución de ejemplo de 20 segundos .
Explicación:
Programa resultante de ejemplo:
Que se basa en la quine por defecto:
"34çìD«"34çìD«
.Ver este consejo 05AB1E mío (sección Cómo usar el diccionario? ) Para entender por qué
‘ÒÞ!
es"BOOM!"
.NOTA: La razón por la que el espacio está allí
çì
es porque, de lo contrario, se interpreta como una cadena de diccionario (triumph
) debido a’...’
.fuente