Wir sehen uns in einem anderen Leben, Brotha!

12

Die meisten von uns LOST-Fans erinnern sich an den Computer, an dem Desmond alle 108 Minuten die Zeichen "4 8 15 16 23 42" eingeben musste, damit die Welt untergeht (oder?).

Hier besteht die Herausforderung darin, ein Programm zu erstellen, das dasselbe tut, indem alle 108 Sekunden die Eingabe 4 8 15 16 23 42eingegeben wird oder die Meldung angezeigt wird

Sorry, the world has ended with status code -1

Es sollte den Benutzer nach 100 Sekunden warnen, dass er eine Nummer mit der Nachricht eingeben muss

Enter, Quick!

Das Programm muss die Eingabe jederzeit lesen können und wenn es die richtige Eingabe ist, wird der Timer zurückgesetzt. Bei falscher Eingabe passiert nichts.

Das Programm sollte auf unbestimmte Zeit ausgeführt werden. So sieht die Timeline nach der letzten gültigen Eingabe aus

Von 0 bis 99 Sekunden: keine Ausgabe
Bei 100 Sekunden: Enter, Quick!
Bei 108 Sekunden:Sorry, the world has ended with status code -1 .

Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes), die diese Aufgabe erfüllt! Viel Glück!

Jacob Misirian
quelle
Ich habe die Frage ein bisschen bearbeitet. Sie können alle Änderungen, die Sie nicht möchten, rückgängig machen.
Martin Ender
2
Es sollte Bonuspunkte für die Ausgabe der richtigen Hieroglyphen geben.
curiousdannii
Nach dem erneuten Lesen der Herausforderung bin ich mir nicht mehr sicher, ob ich sie richtig interpretiert habe. Was soll nach dem "Weltuntergang" geschehen?
Dennis
1
Als verlorener Nerd fühle ich mich verpflichtet darauf hinzuweisen, dass Desmond gewarnt wird, die Zahlen 4 Minuten (240 Sekunden) vor Ablauf des Timers einzugeben.
James

Antworten:

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

Ich bin mir derzeit nicht sicher, was das erwartete Verhalten ist, nachdem "die Welt geendet hat".

Laufen Sie wie folgt:

bash lost.sh 2>&-

2>&-ist erforderlich, um STDERR zu ignorieren, was standardmäßig zulässig ist .

Dennis
quelle
2

Modern-Browser JavaScript, 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)

Anleitung: Führen Sie dies in der Konsole einer leeren Registerkarte aus, klicken Sie auf das Dokument, um den Fokus zu erhalten, und geben Sie die Zeichenfolge wiederholt ein. Solange es dir gut geht, bekommst du überhaupt kein Feedback. Aktualisieren und ändern Sie 1e5 in 1e4, um die Dinge interessanter zu gestalten.

bopjesvla
quelle
1

Groovy, 244 oder 228 Bytes

Ich habe mich fälschlicherweise daran erinnert, dass Java eine nextLine-Methode hat, bei der überlegt wurde, wie lange gewartet werden soll. Deshalb dachte ich, dass dies einfach sein würde. Ich konnte keine Methode finden, die dies tat, also implementierte ich dies mit zwei Threads. Es ist ein bisschen sperrig. Naja.

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

Dies setzt voraus, dass das ordnungsgemäße Verhalten für das Ende der Welt darin besteht, dass der Prozess mit dem Statuscode -1 beendet wird. Wenn das beabsichtigte Verhalten darin besteht, in einer Schleife weiterzumachen und zu erwarten, dass eine externe Kraft die Welt (und damit das Programm) beendet, kann das;System.exit(-1) Teil weggelassen werden, um 16 Bytes zu sparen. Yay.

Ich habe dies ursprünglich geschrieben, um den Hashcode der Zeichenfolge zu verwenden, aber das ist länger als ein exakter Vergleich, der die Zeichenfolge einbettet, weil hashCodees lang ist.

Una
quelle
1

APL (Dyalog Unicode) , 144 Byte SBCS

Wie sich herausstellt, laufen auf beiden Seiten 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

Probieren Sie es online!

:For t:in 100 8 Schleife zweimal, einmal mit t(timput) being 100und dann mit tas 8:

:For s:In⍳t für s(ekunden eingestellt) 1durch und alle ɩ ndices bist

  ⎕RTL←1 setzen die R esponse T ime L imit bis 1 (Sekunde)

  {} Wende das folgende anonyme Lambda darauf an (obwohl dieses Argument nicht verwendet wird)

   1E3:: im Folgenden, wenn eine Ausnahme auftritt:

     Rückkehr []

    Versuchen:

    ⍕4 8 15 16 23 42 Stringifiziere die gewünschten Zahlen

    ⍞≡ Eingabeaufforderung und vergleiche damit (ergibt 0 oder 1)

     das erste, was viele finden ( []oder [1])

   gehe zu dieser Zeile (1 wenn [1], fahre in der nächsten Zeile fort wenn [])

:End Ende der inneren Schleife; Fahren Sie mit der nächsten Sekunde des aktuellen Timeouts fort

t=3 Ist dies die zweite Zeitüberschreitung (0 oder 1)?

 … ⌽⍨ Drehen Sie die folgenden Schritte so oft:

  'Enter, Quick!' 'Sorry, the world has ended with status code -1' Drucken Sie implizit den entsprechenden Text aus

 enthüllen (zum Drucken ohne führende und nachfolgende Leerzeichen)

:End Ende der äußeren Schleife: nach Warnung Schleife; Nach dem Ausdruck "Entschuldigung ..." fahren Sie mit dem Beenden des Programms fort

Adam
quelle
0

C ++ (gcc) , 395 Bytes

Für die Kompilierung unter Linux ist der -pthreadSwitch erforderlich . MinGW verzichtet darauf.

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

Probieren Sie es online!

Gastropner
quelle