¡Nos vemos en otra vida, hermano!

12

La mayoría de nosotros, PERDIDOS, recordamos la computadora en la que Desmond tenía que escribir los caracteres "4 8 15 16 23 42" cada 108 minutos o el mundo se acabaría (¿o no?).

El desafío aquí es crear un programa que haga lo mismo al requerir que cada 108 segundos se ingrese la entrada 4 8 15 16 23 42o se mostrará el mensaje

Sorry, the world has ended with status code -1

Debería advertir al usuario a los 100 segundos que necesita ingresar un número con el mensaje

Enter, Quick!

El programa debe poder leer la entrada en cualquier momento y, si es la entrada correcta, restablecerá el temporizador. Si se da una entrada incorrecta, no sucede nada.

El programa debe ejecutarse indefinidamente. Entonces, la línea de tiempo después de la última entrada válida parece

De 0 a 99 segundos sin salida:
A 100 segundos: Enter, Quick!
en 108 segundos: Sorry, the world has ended with status code -1.

Este es el código de golf, por lo que gana la respuesta más corta (en bytes) que realiza esta tarea. ¡Buena suerte!

Jacob Misirian
fuente
He editado la pregunta un poco. Siéntase libre de revertir cualquier cambio que no desee.
Martin Ender
2
Debería haber puntos de bonificación por generar los jeroglíficos correctos.
curiousdannii
Después de releer el desafío, ya no estoy seguro de haberlo interpretado correctamente. ¿Qué debería suceder después de que "el mundo haya terminado"?
Dennis
1
Como un nerd perdido, me siento obligado a señalar que Desmond sería advertido sobre ingresar los números 4 minutos (240 segundos) antes de que se acabe el tiempo.
James

Respuestas:

10

bash, 160 bytes

I()($s 100&&echo Enter, Quick!&$s 108&&echo Sorry, the world has ended with status code -1&)
i()(read r;[[ $r = '4 8 15 16 23 42' ]]&&pkill $s&&I;i)
s=sleep;I;i

Actualmente no estoy seguro de cuál es el comportamiento esperado después de "el mundo ha terminado".

Corre así:

bash lost.sh 2>&-

2>&-se requiere para ignorar STDERR, que está permitido por defecto .

Dennis
fuente
2

JavaScript de navegador moderno, 252 247 242 bytes

n=t=>Date.now()+(t?0:1e5)
d=n(i=f=0)
onkeyup=e=>{if("4 8 15 16 23 42".charCodeAt(i%15)==e.keyCode&&++i%15<1)d=n(f=0)}
setInterval('if(n(1)>d&&f<2)d=n(1)+8e3,console.log(f++?"Sorry, the world has ended with status code -1":"Enter, Quick!")',9)

Instrucciones: ejecute esto en la consola de una pestaña en blanco, haga clic en su documento para enfocarse y comience a escribir repetidamente la cadena. Mientras lo estés haciendo bien, no recibirás ningún comentario. Actualice y cambie 1e5 a 1e4 para hacer las cosas más interesantes.

bopjesvla
fuente
1

Groovy, 244 o 228 bytes

Recordé erróneamente que Java tenía un método nextLine que requería un argumento sobre cuánto tiempo esperar, así que pensé que sería fácil. No pude encontrar un método que hiciera eso, así que implementé esto con dos hilos. Es un poco voluminoso. Oh bien.

t=Thread.start{while(1)try{Thread.sleep(1e5);println "Enter, Quick!";Thread.sleep(8e3);println "Sorry, the world has ended with status code -1";System.exit(-1)}catch(e){}};while(1)if(System.console().readLine()=="4 8 15 16 23 42")t.interrupt()

Esto supone que el comportamiento adecuado para el fin del mundo es que el proceso salga con un código de estado de -1. Si el comportamiento previsto es seguir en bucle y esperar que una fuerza externa termine el mundo (y, por extensión, el programa), la ;System.exit(-1)porción se puede omitir para guardar 16 bytes. Hurra.

Originalmente escribí esto para usar el código hash de la cadena, pero eso terminó más que una comparación exacta incrustando la cadena porque hashCodees larga.

Una
fuente
1

APL (Dyalog Unicode) , SBCS de 144 bytes

Como resultado, ambas partes están ejecutando APL ...

:For t:In 100 8
:For s:Int
→{1E3::⍬⋄⍳⍞≡⍕4 8 15 16 23 42}⎕RTL1
:End
'Enter, Quick!' 'Sorry, the world has ended with status code -1'⌽⍨t=8
:End

Pruébalo en línea!

:For t:in 100 8 bucle dos veces, una vez con t(timput) 100y luego con tcomo 8:

:For s:In⍳t for s(econds) 1through y todos los ɩ nices hastat

  ⎕RTL←1 establecer el R espuesta T ime L IMIT a 1 (segundos)

  {... } aplique la siguiente lambda anónima a eso (aunque este argumento no se utiliza)

   1E3:: a continuación, si ocurre alguna excepción:

     regreso []

    tratar:

    ⍕4 8 15 16 23 42 stringificar los números requeridos

    ⍞≡ solicitar entrada y comparar con eso (da 0 o 1)

     el primero que muchos ɩ ndices ( []o [1] `

   ir a esa línea (1 si [1], continuar en la siguiente línea si [])

:End final del bucle interno; proceder con el siguiente segundo del tiempo de espera actual

t=3 ¿Es este el segundo tiempo de espera (0 o 1)?

 ... ⌽⍨ rotar los siguientes pasos:

  'Enter, Quick!' 'Sorry, the world has ended with status code -1' imprimir implícitamente el texto apropiado

 revelar (para imprimir sin espacios iniciales y finales)

:End final del bucle externo: después de la advertencia, bucle; después de imprimir "Lo siento ...", proceda a finalizar el programa

Adán
fuente
0

C ++ (gcc) , 395 bytes

Compilar en Linux requiere el -pthreadcambio. MinGW prescinde.

#import<iostream>
#import<thread>
using namespace std;auto N=chrono::steady_clock::now;auto L=N();int w;int main(){thread A([]{for(;;){auto t=chrono::duration_cast<chrono::seconds>(N()-L).count();t>99&&!w?puts("Enter, Quick!"),w=1:t>107?exit(puts("Sorry, the world has ended with status code -1")),0:0;}}),B([]{for(string s;;s=="4 8 15 16 23 42"?L=N(),w=0:0)getline(cin,s);});A.join();B.join();}

Pruébalo en línea!

gastropner
fuente