Sampai jumpa di kehidupan lain, brotha!

12

Sebagian besar dari kita penggemar HILANG di luar sana mengingat komputer yang Desmond harus mengetik karakter "4 8 15 16 23 42" di setiap 108 menit atau dunia akan berakhir (atau akankah itu?).

Tantangannya di sini adalah membuat program yang akan melakukan hal yang sama dengan mengharuskan setiap 108 detik input 4 8 15 16 23 42dimasukkan atau itu akan menampilkan pesan

Sorry, the world has ended with status code -1

Seharusnya memperingatkan pengguna pada 100 detik bahwa mereka harus memasukkan nomor dengan pesan

Enter, Quick!

Program harus dapat membaca input kapan saja dan jika itu adalah input yang benar maka program akan mengatur ulang timer. Jika input yang salah diberikan tidak ada yang terjadi.

Program harus berjalan tanpa batas. Jadi garis waktu setelah input valid yang terakhir terlihat seperti

Dari 0 sampai 99 detik: tidak ada output
Pada 100 detik: Enter, Quick!
Pada 108 detik: Sorry, the world has ended with status code -1.

Ini adalah kode golf sehingga jawaban terpendek (dalam byte) yang menyelesaikan tugas ini menang! Semoga berhasil!

Yakub Misirian
sumber
Saya sudah sedikit mengedit pertanyaan. Jangan ragu untuk mengembalikan perubahan yang tidak Anda inginkan.
Martin Ender
2
Seharusnya ada poin bonus untuk menghasilkan hieroglif yang benar.
curiousdannii
Setelah membaca ulang tantangannya, saya tidak yakin lagi saya sudah menafsirkannya dengan benar. Apa yang harus terjadi setelah "dunia berakhir"?
Dennis
1
Sebagai orang aneh, saya merasa berkewajiban untuk menunjukkan bahwa Desmond akan diperingatkan tentang memasukkan angka 4 menit (240 detik) sebelum penghitung waktu habis.
James

Jawaban:

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

Saat ini saya tidak yakin apa perilaku yang diharapkan setelah "dunia telah berakhir".

Jalankan seperti ini:

bash lost.sh 2>&-

2>&-diperlukan untuk mengabaikan STDERR, yang diizinkan secara default .

Dennis
sumber
2

JavaScript browser modern, 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)

Petunjuk: jalankan ini di konsol tab kosong, klik pada dokumennya untuk mendapatkan fokus dan mulai mengetik string berulang kali. Selama Anda baik-baik saja, Anda tidak akan mendapat umpan balik sama sekali. Refresh dan ubah 1e5 ke 1e4 untuk membuat segalanya lebih menarik.

bopjesvla
sumber
1

Groovy, 244 atau 228 byte

Saya salah ingat Java memiliki metode nextLine yang membutuhkan argumen berapa lama menunggu, jadi saya pikir ini akan mudah. Saya tidak dapat menemukan metode yang melakukan itu, jadi saya menerapkan ini dengan dua utas. Agak tebal. Baiklah.

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

Ini mengasumsikan perilaku yang tepat untuk akhir dunia adalah proses untuk keluar dengan kode status -1. Jika tingkah laku yang dimaksudkan adalah untuk tetap mengulang dan mengharapkan kekuatan eksternal untuk mengakhiri dunia (dan dengan ekstensi, program), ;System.exit(-1)porsinya dapat dihilangkan untuk menghemat 16 byte. Yay.

Saya awalnya menulis ini untuk menggunakan kode hash dari string, tetapi akhirnya lebih dari perbandingan yang tepat menanamkan string karena hashCodepanjang.

Una
sumber
1

APL (Dyalog Unicode) , 144 byte SBCS

Ternyata, kedua belah pihak menjalankan 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

Cobalah online!

:For t:in 100 8 lingkaran dua kali, sekali dengan t(timput) sedang 100dan kemudian dengan tsebagai 8:

:For s:In⍳t untuk s(econds) 1melalui dan semua ɩ ndices sampait

  ⎕RTL←1 atur R esponse T ime L imit ke 1 (detik)

  {... } terapkan lambda anonim berikut untuk itu (meskipun argumen ini tidak digunakan)

   1E3:: berikut ini, jika ada pengecualian yang terjadi:

     kembali []

    mencoba:

    ⍕4 8 15 16 23 42 merangkai angka-angka yang diperlukan

    ⍞≡ meminta input dan membandingkannya (memberi 0 atau 1)

     yang pertama yang banyak ɩ ndices ( []atau [1] `

   pergi ke baris itu (1 jika [1], lanjutkan ke baris berikutnya jika [])

:End ujung lingkaran dalam; lanjutkan dengan detik berikutnya dari batas waktu saat ini

t=3 apakah ini timeout kedua (0 atau 1)?

 ... ⌽⍨ putar langkah-langkah berikut ini yang banyak:

  'Enter, Quick!' 'Sorry, the world has ended with status code -1' secara implisit mencetak teks yang sesuai

 mengungkapkan (untuk mencetak tanpa spasi awal dan belakang)

:End akhir loop luar: setelah peringatan, loop; setelah mencetak "Maaf ...", lanjutkan ke penghentian program

Adm
sumber
0

C ++ (gcc) , 395 byte

Kompilasi di Linux membutuhkan -pthreadsakelar. MinGW melakukannya tanpa.

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

Cobalah online!

gastropner
sumber