Ci vediamo in un'altra vita, Brotha!


12

Molti di noi PERDUTI fan là fuori ricordano il computer che Desmond ha dovuto digitare i caratteri "4 8 15 16 23 42" ogni 108 minuti o il mondo sarebbe finito (o sarebbe?).

La sfida qui è creare un programma che farebbe la stessa cosa richiedendo che ogni 108 secondi 4 8 15 16 23 42venga inserito l'input o visualizzerà il messaggio

Sorry, the world has ended with status code -1

Dovrebbe avvisare l'utente a 100 secondi che deve inserire un numero con il messaggio

Enter, Quick!

Il programma deve essere in grado di leggere l'input in qualsiasi momento e se si tratta dell'ingresso corretto ripristinerà il timer. Se viene fornito un input errato, non accade nulla.

Il programma dovrebbe essere eseguito indefinitamente. Quindi appare la sequenza temporale dopo l'ultimo input valido

Da 0 a 99 secondi: nessuna uscita
A 100 secondi: Enter, Quick!
A 108 secondi: Sorry, the world has ended with status code -1.

Questo è il golf del codice, quindi vince la risposta più breve (in byte) che compie questo compito! In bocca al lupo!


Ho modificato un po 'la domanda. Sentiti libero di ripristinare tutte le modifiche che non desideri.
Martin Ender,

2
Dovrebbero esserci punti bonus per l'output dei geroglifici corretti.
curiousdannii,

Dopo aver riletto la sfida, non sono più sicuro di averla interpretata correttamente. Cosa dovrebbe succedere dopo che "il mondo è finito"?
Dennis,

1
Come un secchione smarrito, mi sento in dovere di sottolineare che Desmond sarebbe stato avvisato di inserire i numeri 4 minuti (240 secondi) prima che scada il tempo.
James,

Risposte:


10

bash, 160 byte

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

Al momento non sono sicuro quale sia il comportamento previsto dopo "il mondo è finito".

Esegui in questo modo:

bash lost.sh 2>&-

2>&-è necessario ignorare STDERR, che è consentito per impostazione predefinita .


2

JavaScript del browser moderno, 252 247 242 byte

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)

Istruzioni: esegui questo nella console di una scheda vuota, fai clic sul suo documento per ottenere lo stato attivo e iniziare a digitare ripetutamente la stringa. Finché stai andando bene, non riceverai alcun feedback. Aggiorna e cambia da 1e5 a 1e4 per rendere le cose più interessanti.


1

Groovy, 244 o 228 byte

Mi sono erroneamente ricordato che Java aveva un metodo nextLine che discuteva su quanto aspettare, quindi ho pensato che sarebbe stato facile. Non sono riuscito a trovare un metodo che lo ha fatto, quindi l'ho implementato con due thread. È un po 'ingombrante. Oh bene.

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()

Ciò presuppone che il comportamento corretto per la fine del mondo sia per la chiusura del processo con un codice di stato -1. Se il comportamento previsto è quello di mantenere il loop e aspettarsi che una forza esterna finisca il mondo (e, per estensione, il programma), la ;System.exit(-1)porzione può essere omessa per salvare 16 byte. Sìì.

Inizialmente ho scritto questo per usare l'hashCode della stringa, ma è finito più a lungo di un confronto esatto che incorpora la stringa perché hashCodeè lunga.


1

APL (Dyalog Unicode) , SBCS da 144 byte

A quanto pare, entrambe le parti eseguono 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

Provalo online!

:For t:in 100 8 ciclica due volte, una volta con t(timput) essere 100e poi con tas 8:

:For s:In⍳t for s(econds) 1through e tutti gli ɩ ndices fino at

  ⎕RTL←1 imposta R esponse T ime L imit su 1 (secondo)

  {... } applica il seguente lambda anonimo a questo (sebbene questo argomento non sia utilizzato)

   1E3:: di seguito, se si verifica un'eccezione:

     ritorno []

    provare:

    ⍕4 8 15 16 23 42 stringere i numeri richiesti

    ⍞≡ richiede input e confronta con quello (dà 0 o 1)

     il primo che molti ɩ ndices ( []o [1] `

   vai a quella linea (1 if [1], continua alla riga successiva if [])

:End fine del ciclo interno; procedere con il secondo successivo del timeout corrente

t=3 è il secondo timeout (0 o 1)?

 ... ⌽⍨ ruota i seguenti passaggi:

  'Enter, Quick!' 'Sorry, the world has ended with status code -1' stampare in modo implicito il testo appropriato

 divulgare (per stampare senza spazio iniziale e finale)

:End fine dell'anello esterno: dopo avvertimento, anello; dopo aver stampato "Siamo spiacenti ...", procedere con la chiusura del programma


0

C ++ (gcc) , 395 byte

La compilazione su Linux richiede il -pthreadpassaggio. MinGW fa a meno.

#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();}

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.