Te vejo em outra vida, irmão!

12

A maioria de nós, fãs PERDIDOS por aí, lembra-se do computador em que Desmond tinha que digitar os caracteres "4 8 15 16 23 42" a cada 108 minutos ou o mundo terminaria (ou seria?).

O desafio aqui é criar um programa que faça a mesma coisa, exigindo que a cada 108 segundos a entrada 4 8 15 16 23 42seja inserida ou ela exiba a mensagem

Sorry, the world has ended with status code -1

Deve avisar o usuário em 100 segundos que ele precisa digitar um número com a mensagem

Enter, Quick!

O programa deve poder ler a entrada a qualquer momento e, se for a entrada correta, redefinirá o timer. Se uma entrada incorreta for fornecida, nada acontecerá.

O programa deve ser executado indefinidamente. Portanto, a linha do tempo após a última entrada válida parece

De 0 a 99 segundos: nenhuma saída
A 100 segundos: Enter, Quick!
Em 108 segundos: Sorry, the world has ended with status code -1.

Isso é código de golfe, portanto, a resposta mais curta (em bytes) que realiza essa tarefa vence! Boa sorte!

Jacob Misirian
fonte
Eu editei a pergunta um pouco. Sinta-se à vontade para reverter as alterações que não desejar.
Martin Ender
2
Deve haver pontos de bônus para gerar os hieróglifos corretos.
precisa saber é o seguinte
Depois de reler o desafio, não tenho mais certeza de ter interpretado corretamente. O que deve acontecer depois que o "mundo acabou"?
Dennis
1
Como um nerd perdido, sinto-me obrigado a salientar que Desmond seria avisado sobre digitar os números 4 minutos (240 segundos) antes do tempo acabar.
James

Respostas:

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

Atualmente, estou incerto qual é o comportamento esperado depois que "o mundo acabou".

Execute assim:

bash lost.sh 2>&-

2>&-é necessário para ignorar STDERR, que é permitido por padrão .

Dennis
fonte
2

JavaScript do 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)

Instruções: execute isso no console de uma guia em branco, clique no documento para obter foco e comece a digitar repetidamente a string. Enquanto você estiver indo bem, você não receberá nenhum feedback. Atualize e altere 1e5 para 1e4 para tornar as coisas mais interessantes.

bopjesvla
fonte
1

Groovy, 244 ou 228 bytes

Lembrei-me de que o Java tinha um método nextLine que levava um argumento de quanto tempo esperar, então achei que isso seria fácil. Não consegui encontrar um método que fizesse isso, então implementei isso com dois threads. É um pouco volumoso. Ah bem.

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

Isso pressupõe que o comportamento adequado para o final do mundo seja o encerramento do processo com um código de status -1. Se o comportamento pretendido é manter o loop e esperar que uma força externa termine o mundo (e, por extensão, o programa), a ;System.exit(-1)parte pode ser omitida para salvar 16 bytes. Yay.

Originalmente, escrevi isso para usar o hashCode da string, mas isso acabou mais do que uma comparação exata que incorpora a string porque hashCodeé longa.

Una
fonte
1

APL (Dyalog Unicode) , 144 bytes SBCS

Como se vê, ambos os lados estão executando o 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

Experimente online!

:For t:in 100 8 loop duas vezes, uma vez com t(timput) sendo 100e depois com tcomo 8:

:For s:In⍳t para s(egundos) 1através e todos os Ɩ ndices atét

  ⎕RTL←1 definir o R esposto t ime L imit a uma (segunda)

  {} Aplique o seguinte lambda anônimo a isso (embora esse argumento não seja usado)

   1E3:: a seguir, se ocorrer alguma exceção:

     Retorna []

    experimentar:

    ⍕4 8 15 16 23 42 especificar os números necessários

    ⍞≡ solicitar entrada e comparar com isso (fornece 0 ou 1)

     a primeira vez que muitos Ɩ ndices ( []ou [1] `

   vá para essa linha (1 se [1], continue na próxima linha se [])

:End fim do loop interno; prossiga com o próximo segundo do tempo limite atual

t=3 este é o segundo tempo limite (0 ou 1)?

 … ⌽⍨ Gire as seguintes etapas:

  'Enter, Quick!' 'Sorry, the world has ended with status code -1' imprimir implicitamente o texto apropriado

 divulgar (imprimir sem espaço à esquerda e à direita)

:End fim do loop externo: após aviso, loop; depois de imprimir "Desculpe ...", continue para encerrar o programa

Adão
fonte
0

C ++ (gcc) , 395 bytes

Compilar no Linux requer a -pthreadopção. MinGW fica sem.

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

Experimente online!

gastropner
fonte