Rendez-vous dans une autre vie, Brotha!

12

La plupart d'entre nous, fans PERDUS, se souviennent de l'ordinateur sur lequel Desmond devait taper les caractères "4 8 15 16 23 42" toutes les 108 minutes, sinon le monde prendrait fin (ou n'est-ce pas?).

Le défi ici est de créer un programme qui ferait la même chose en exigeant que toutes les 108 secondes l'entrée 4 8 15 16 23 42soit entrée ou elle affichera le message

Sorry, the world has ended with status code -1

Il doit avertir l'utilisateur à 100 secondes qu'il doit saisir un numéro avec le message

Enter, Quick!

Le programme doit pouvoir lire l'entrée à tout moment et s'il s'agit de l'entrée correcte, il réinitialisera la minuterie. Si une entrée incorrecte est donnée, rien ne se passe.

Le programme devrait s'exécuter indéfiniment. Ainsi, la chronologie après la dernière entrée valide ressemble

De 0 à 99 secondes: pas de sortie
à 100 secondes: Enter, Quick!
à 108 secondes: Sorry, the world has ended with status code -1.

C'est le golf de code, donc la réponse la plus courte (en octets) qui accomplit cette tâche gagne! Bonne chance!

Jacob Misirian
la source
J'ai un peu édité la question. N'hésitez pas à annuler les modifications que vous ne souhaitez pas.
Martin Ender
2
Il devrait y avoir des points bonus pour produire les bons hiéroglyphes.
curiousdannii
Après avoir relu le défi, je ne suis plus sûr de l'avoir correctement interprété. Que devrait-il se passer après la fin du «monde»?
Dennis
1
En tant que nerd perdu, je me sens obligé de souligner que Desmond serait averti de la saisie des chiffres 4 minutes (240 secondes) avant la fin du chronomètre.
James

Réponses:

10

bash, 160 octets

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

Je ne suis actuellement pas certain du comportement attendu après "la fin du monde".

Courez comme ceci:

bash lost.sh 2>&-

2>&-est requis pour ignorer STDERR, ce qui est autorisé par défaut .

Dennis
la source
2

JavaScript pour navigateur moderne, 252 247 242 octets

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)

Instructions: exécutez-le dans la console d'un onglet vierge, cliquez sur son document pour obtenir le focus et commencez à taper à plusieurs reprises la chaîne. Tant que vous vous portez bien, vous n'aurez aucun retour. Actualisez et changez 1e5 en 1e4 pour rendre les choses plus intéressantes.

bopjesvla
la source
1

Groovy, 244 ou 228 octets

Je me souvenais à tort que Java avait une méthode nextLine qui prenait un argument sur le temps d'attente, alors j'ai pensé que ce serait facile. Je ne pouvais pas trouver une méthode qui faisait cela, alors j'ai implémenté cela avec deux threads. C'est un peu encombrant. Tant pis.

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

Cela suppose que le comportement correct pour la fin du monde est que le processus se termine avec un code d'état de -1. Si le comportement prévu est de continuer à boucler et de s'attendre à ce qu'une force externe mette fin au monde (et par extension, au programme), la ;System.exit(-1)partie peut être omise pour économiser 16 octets. Yay.

À l'origine, j'ai écrit ceci pour utiliser le hashCode de la chaîne, mais cela s'est terminé plus longtemps qu'une comparaison exacte incorporant la chaîne car elle hashCodeest longue.

Una
la source
1

APL (Dyalog Unicode) , 144 octets SBCS

Il s'avère que les deux parties exécutent 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

Essayez-le en ligne!

:For t:in 100 8 boucle deux fois, une fois avec t(timput) 100et ensuite avec tas 8:

:For s:In⍳t pour s(econds) à 1travers et tous les ɩ ndices jusqu'àt

  ⎕RTL←1 régler le R ÉPONSE T ime L imit à 1 (secondes)

  {} Appliquer le lambda anonyme suivant à cela (bien que cet argument ne soit pas utilisé)

   1E3:: dans les cas suivants, si une exception se produit:

     revenir []

    essayer:

    ⍕4 8 15 16 23 42 stringifier les nombres requis

    ⍞≡ demander l'entrée et comparer à cela (donne 0 ou 1)

     la première que de nombreux ɩ ndices ( []ou [1] `

   aller à cette ligne (1 si [1], continuer à la ligne suivante si [])

:End fin de boucle intérieure; passer à la seconde suivante du délai actuel

t=3 est-ce le deuxième timeout (0 ou 1)?

 … ⌽⍨ Faites pivoter le nombre d'étapes suivant:

  'Enter, Quick!' 'Sorry, the world has ended with status code -1' imprimer implicitement le texte approprié

 divulguer (pour imprimer sans espace de début et de fin)

:End fin de la boucle extérieure: après avertissement, boucle; après avoir imprimé "Désolé ...", passez au programme

Adam
la source
0

C ++ (gcc) , 395 octets

La compilation sous Linux nécessite le -pthreadcommutateur. MinGW s'en passe.

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

Essayez-le en ligne!

gastropner
la source