Başka bir hayatta görüşürüz kardeşim!


12

Birçoğumuz KAYIP hayranları Desmond'un her 108 dakikada bir "4 8 15 16 23 42" karakterlerini yazmak zorunda kaldığını ya da dünyanın biteceğini (ya da bitireceğini) hatırlıyoruz.

Buradaki zorluk, girişin her 108 saniyede bir 4 8 15 16 23 42girilmesini veya iletinin görüntülenmesini gerektirerek aynı şeyi yapacak bir program oluşturmaktır.

Sorry, the world has ended with status code -1

100 saniyede kullanıcıyı mesajla bir sayı girmeleri gerektiği konusunda uyarmalıdır.

Enter, Quick!

Program girişi istediği zaman okuyabilmelidir ve doğru giriş ise zamanlayıcıyı sıfırlayacaktır. Yanlış giriş verilirse hiçbir şey olmaz.

Program süresiz olarak çalışmalıdır. Dolayısıyla, son geçerli girdiden sonraki zaman çizelgesi

Hiçbir çıkışı: 0 ila 99 saniye arasında
100 saniyede: Enter, Quick!
108 saniyede: Sorry, the world has ended with status code -1.

Bu kod golf bu yüzden bu görevi yerine getiren en kısa cevap (bayt cinsinden) kazanır! İyi şanslar!


Soruyu biraz düzenledim. İstemediğiniz değişiklikleri geri almaktan çekinmeyin.
Martin Ender

2
Doğru hiyerogliflerin çıktısı için bonus puanlar olmalıdır.
curiousdannii

Sorunu yeniden okuduktan sonra, artık doğru yorumladığımdan emin değilim. "Dünya sona erdi" den sonra ne olmalı?
Dennis

1
Kayıp bir inek olarak, Desmond'un zamanlayıcı bitmeden 4 dakika (240 saniye) sayıları girme konusunda uyarılacağını belirtmek zorundayım.
James

Yanıtlar:


10

bash, 160 bayt

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

Şu anda "dünya sona erdi" den sonra beklenen davranışın ne olduğundan emin değilim.

Şu şekilde çalıştırın:

bash lost.sh 2>&-

2>&-, varsayılan olarak izin verilen STDERR'ı yok saymak için gereklidir .


2

Modern tarayıcı JavaScript, 252 247 242 bayt

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)

Talimatlar: boş bir sekmenin konsolunda çalıştırın, odaklanmak için belgeye tıklayın ve dizeyi tekrar tekrar yazmaya başlayın. İyi yaptığınız sürece hiçbir geri bildirim almayacaksınız. Yenileyin ve daha ilginç hale getirmek için 1e5'i 1e4 olarak değiştirin.


1

Groovy, 244 veya 228 bayt

Yanlışlıkla Java'nın ne kadar bekleyeceğini tartışan bir nextLine yöntemine sahip olduğunu hatırladım, bu yüzden bu kolay olacağını düşündüm. Bunu yapan bir yöntem bulamadım, bu yüzden bunu iki iş parçacığıyla uyguladım. Biraz hantal. Oh iyi.

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

Bu, dünya sonu için sürecin -1 durum koduyla çıkması için uygun davranışı varsayar. Amaçlanan davranış döngüyü sürdürmek ve dünyayı bitirmek için harici bir kuvvet beklemekse (ve ;System.exit(-1)bununla birlikte, programı), bölüm 16 bayt tasarruf etmek için atlanabilir. Yaşasın.

Başlangıçta bu dize hashCode kullanmak için yazdı, ama uzun olduğu için dize gömme kesin bir karşılaştırma daha uzun yara hashCode.


1

APL (Dyalog Unicode) , 144 bayt SBCS

Anlaşıldığı üzere, her iki taraf da APL çalıştırıyor…

: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

Çevrimiçi deneyin!

:For t:in 100 8 döngü iki kere, bir kez t(timput) olmak 100ile ve sonra tolarak 8:

:For s:In⍳t boyunca s( econds ) 1ve tüm öğeler içint

  ⎕RTL←1 ayarlamak R esponse T ime L (ikinci) 1 IMIT

  {} Şu anonim lambda'yı buna uygulayın (bu argüman kullanılmamasına rağmen)

   1E3:: aşağıda bir istisna olursa:

     dönüş []

    Deneyin:

    ⍕4 8 15 16 23 42 gerekli sayıları dizgi yapmak

    ⍞≡ giriş istemi ve bununla karşılaştır (0 veya 1 verir)

     bir çok şey ( []ya da [1])

   o satıra git (eğer 1 ise [1], sonraki satırda devam et [])

:End iç döngünün sonu; geçerli zaman aşımının sonraki saniyesiyle devam et

t=3 bu ikinci zaman aşımı mı (0 veya 1)?

 … ⌽⍨ Aşağıdaki adımları döndürün:

  'Enter, Quick!' 'Sorry, the world has ended with status code -1' dolaylı olarak uygun metni yazdırın

 ifşa etme (ön ve arka boşluk bırakmadan yazdırmak için)

:End dış döngünün sonu: uyarıdan sonra, döngü; "Üzgünüm…" yazdıktan sonra, programı sonlandırmaya devam edin


0

C ++ (gcc) , 395 bayt

Linux'ta derlemek -pthreadgeçiş gerektirir . MinGW olmadan yapar.

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

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.