แล้วพบกันใหม่ในชีวิต!


12

พวกเราส่วนใหญ่หายไปแฟน ๆ ที่นั่นจำคอมพิวเตอร์ที่ Desmond ต้องพิมพ์ตัวอักษร "4 8 15 16 23 42" ในทุก ๆ 108 นาทีหรือโลกจะจบลง (หรือจะ?)

ความท้าทายที่นี่คือการสร้างโปรแกรมที่จะทำสิ่งเดียวกันโดยกำหนดให้ทุก ๆ 108 วินาทีอินพุต4 8 15 16 23 42ถูกป้อนหรือจะแสดงข้อความ

Sorry, the world has ended with status code -1

ควรเตือนผู้ใช้ใน 100 วินาทีว่าพวกเขาจำเป็นต้องป้อนตัวเลขด้วยข้อความ

Enter, Quick!

โปรแกรมจะต้องสามารถอ่านอินพุตได้ตลอดเวลาและหากเป็นอินพุตที่ถูกต้องโปรแกรมจะรีเซ็ตตัวจับเวลา หากใส่ไม่ถูกต้องจะไม่มีอะไรเกิดขึ้น

โปรแกรมควรทำงานอย่างไม่มีกำหนด ไทม์ไลน์หลังจากอินพุตที่ถูกต้องล่าสุดดูเหมือนว่า

จาก 0-99 วินาที: การส่งออกไม่มี
ที่ 100 วินาทีEnter, Quick!
ใน 108 Sorry, the world has ended with status code -1วินาที

นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ที่ทำภารกิจนี้ให้สำเร็จชนะ! โชคดี!


ฉันแก้ไขคำถามเล็กน้อย คุณสามารถย้อนกลับการเปลี่ยนแปลงใด ๆ ที่คุณไม่ต้องการได้
Martin Ender

2
ควรมีคะแนนโบนัสสำหรับแสดงผลกราฟิคที่ถูกต้อง
อยากรู้อยากเห็น dannii

หลังจากอ่านความท้าทายอีกครั้งฉันไม่แน่ใจอีกต่อไปว่าฉันตีความถูกต้องแล้ว จะเกิดอะไรขึ้นหลังจาก "โลกได้สิ้นสุดลง"?
เดนนิส

1
ในฐานะผู้หลงทางฉันรู้สึกว่าต้องชี้ให้เห็นว่าเดสมอนด์จะได้รับคำเตือนเกี่ยวกับการป้อนตัวเลข 4 นาที (240 วินาที) ก่อนที่ตัวจับเวลาจะหมด
James

คำตอบ:


10

ทุบตี, 160 ไบต์

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

ขณะนี้ฉันไม่แน่ใจว่าพฤติกรรมที่คาดหวังคืออะไรหลังจาก "โลกได้สิ้นสุดลง"

ทำงานแบบนี้:

bash lost.sh 2>&-

2>&-เป็นสิ่งจำเป็นที่จะไม่สนใจ STDERR ซึ่งเป็นที่ได้รับอนุญาตโดยค่าเริ่มต้น


2

JavaScript เบราว์เซอร์รุ่นใหม่, 252 247 242 ไบต์

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)

คำแนะนำ: เรียกใช้สิ่งนี้ในคอนโซลของแท็บที่ว่างเปล่าคลิกที่เอกสารเพื่อรับโฟกัสและเริ่มพิมพ์สตริงซ้ำ ๆ ตราบใดที่คุณทำได้ดีคุณจะไม่ได้รับความคิดเห็นใด ๆ รีเฟรชและเปลี่ยน 1e5 เป็น 1e4 เพื่อทำให้สิ่งต่าง ๆ น่าสนใจยิ่งขึ้น


1

Groovy, 244 หรือ 228 ไบต์

ฉันจำ Java อย่างผิด ๆ ว่ามีวิธีการต่อไปของบรรทัดที่ใช้เวลานานในการโต้แย้งดังนั้นฉันคิดว่านี่เป็นเรื่องง่าย ฉันไม่พบวิธีที่ทำเช่นนั้นดังนั้นฉันจึงดำเนินการนี้ด้วยสองหัวข้อ มันค่อนข้างใหญ่ โอ้ดี

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

สิ่งนี้ถือว่าพฤติกรรมที่เหมาะสมสำหรับจุดจบของโลกคือกระบวนการที่จะออกด้วยรหัสสถานะที่ -1 หากพฤติกรรมที่ตั้งใจไว้คือการวนลูปและคาดว่าแรงภายนอกจะสิ้นสุดโลก (และโดยการขยายโปรแกรม) ;System.exit(-1)ส่วนที่สามารถละเว้นเพื่อบันทึก 16 ไบต์ เย้.

ฉันเดิมเขียนสิ่งนี้เพื่อใช้ hashCode ของสตริง แต่ที่แผลยาวกว่าการเปรียบเทียบที่แน่นอนฝังสตริงเพราะhashCodeยาว


1

APL (Dyalog Unicode) , 144 ไบต์SBCS

เมื่อปรากฎว่าทั้งสองฝ่ายกำลังเรียกใช้ 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

ลองออนไลน์!

:For t:in 100 8 ห่วงสองครั้งครั้งด้วยt(timput) เป็น100แล้วด้วยtเป็น8:

:For s:In⍳t สำหรับs(econds) 1ผ่านและทุกɩ ndices จนกว่าt

  ⎕RTL←1 ตั้งค่าR esponse T ime Lเป็น 1 (วินาที)

  {} ใช้แลมบ์ดานิรนามดังต่อไปนี้ (แม้ว่าข้อโต้แย้งนี้จะไม่ได้ใช้)

   1E3:: ในสิ่งต่อไปนี้หากมีข้อยกเว้นเกิดขึ้น:

     กลับ []

    ลอง:

    ⍕4 8 15 16 23 42 stringify หมายเลขที่ต้องการ

    ⍞≡ พรอมต์สำหรับการป้อนข้อมูลและเปรียบเทียบกับที่ (ให้ 0 หรือ 1)

     ครั้งแรกที่หลายɩ ndices ( []หรือ [1] `

   ไปที่บรรทัดนั้น (1 ถ้าทำ[1]ต่อในบรรทัดถัดไปหาก[])

:End ปลายวงด้านใน; ดำเนินการกับวินาทีถัดไปของการหมดเวลาปัจจุบัน

t=3 นี่เป็นการหมดเวลาครั้งที่สอง (0 หรือ 1) หรือไม่

 … ⌽⍨ หมุนขั้นตอนดังต่อไปนี้:

  'Enter, Quick!' 'Sorry, the world has ended with status code -1' พิมพ์ข้อความที่เหมาะสมโดยปริยาย

 เปิดเผย (เพื่อพิมพ์โดยไม่ต้องนำหน้าและต่อท้ายพื้นที่)

:End สิ้นสุดการวนรอบนอก: หลังจากการเตือน, วนรอบ; หลังจากพิมพ์ "ขออภัย ... " ให้ดำเนินการต่อเพื่อยุติโปรแกรม


0

C ++ (gcc) , 395 ไบต์

การคอมไพล์บน Linux ต้องใช้-pthreadสวิตช์ MinGW ทำได้โดยไม่ต้อง

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

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.