Hẹn gặp lại ở kiếp khác, brotha!


12

Hầu hết chúng ta LOST người hâm mộ ngoài kia đều nhớ máy tính mà Desmond phải gõ các ký tự "4 8 15 16 23 42" trong mỗi 108 phút hoặc thế giới sẽ kết thúc (hoặc sẽ thế?).

Thách thức ở đây là tạo ra một chương trình sẽ làm điều tương tự bằng cách yêu cầu cứ sau 108 giây đầu vào 4 8 15 16 23 42được nhập hoặc nó sẽ hiển thị thông báo

Sorry, the world has ended with status code -1

Nó sẽ cảnh báo người dùng sau 100 giây rằng họ cần nhập số với thông báo

Enter, Quick!

Chương trình phải có khả năng đọc đầu vào bất cứ lúc nào và nếu đó là đầu vào chính xác, nó sẽ đặt lại bộ hẹn giờ. Nếu đầu vào không chính xác được đưa ra không có gì xảy ra.

Chương trình nên chạy vô thời hạn. Vì vậy, dòng thời gian sau đầu vào hợp lệ cuối cùng trông giống như

Từ 0 đến 99 giây: không có đầu ra
Ở 100 giây: Enter, Quick!
Ở 108 giây : Sorry, the world has ended with status code -1.

Đây là mã golf để câu trả lời ngắn nhất (tính bằng byte) hoàn thành nhiệm vụ này sẽ thắng! Chúc may mắn!


Tôi đã chỉnh sửa câu hỏi một chút. Vui lòng quay lại bất kỳ thay đổi nào bạn không muốn.
Martin Ender

2
Cần có điểm thưởng để xuất ra chữ tượng hình chính xác.
Curdannii

Sau khi đọc lại thử thách, tôi không chắc nữa tôi đã giải thích nó một cách chính xác. Điều gì sẽ xảy ra sau khi "thế giới đã kết thúc"?
Dennis

1
Là một mọt sách bị mất, tôi cảm thấy bắt buộc phải chỉ ra rằng Desmond sẽ được cảnh báo về việc nhập số 4 phút (240 giây) trước khi hết giờ.
James

Câu trả lời:


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

Tôi hiện không chắc chắn hành vi dự kiến ​​là gì sau khi "thế giới đã kết thúc".

Chạy như thế này:

bash lost.sh 2>&-

2>&-được yêu cầu bỏ qua STDERR, được cho phép theo mặc định .


2

JavaScript trình duyệt hiện đại, 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)

Hướng dẫn: chạy cái này trong bảng điều khiển của một tab trống, nhấp vào tài liệu của nó để lấy tiêu điểm và bắt đầu gõ chuỗi liên tục. Miễn là bạn đang làm tốt, bạn sẽ không nhận được phản hồi nào. Làm mới và thay đổi 1e5 thành 1e4 để làm cho mọi thứ thú vị hơn.


1

Groovy, 244 hoặc 228 byte

Tôi đã nhớ sai Java có một phương thức nextLine mất một đối số về thời gian chờ đợi, vì vậy tôi nghĩ rằng điều này sẽ dễ dàng. Tôi không thể tìm thấy một phương pháp đã làm điều đó, vì vậy tôi đã thực hiện điều này với hai luồng. Nó hơi cồng kềnh. Ồ tốt

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

Điều này giả định hành vi thích hợp cho thế giới kết thúc là cho quá trình thoát ra với mã trạng thái -1. Nếu hành vi dự định là tiếp tục lặp và mong muốn một lực bên ngoài kết thúc thế giới (và bằng cách mở rộng, chương trình), ;System.exit(-1)phần có thể được bỏ qua để lưu 16 byte. Yay

Ban đầu tôi đã viết cái này để sử dụng mã băm của chuỗi, nhưng nó dài hơn một so sánh chính xác nhúng chuỗi vì hashCodenó dài.


1

APL (Dyalog Unicode) , 144 byte SBCS

Hóa ra, cả hai bên đều đang chạy 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

Hãy thử trực tuyến!

:For t:in 100 8 lặp hai lần, một lần với t(timput) 100và sau đó t8:

:For s:In⍳t cho s(econds) 1thông qua và tất cả các ɩ ndices cho đến khit

  ⎕RTL←1 đặt R Esponse T ime L bắt chước thành 1 (giây)

  {... } áp dụng lambda anonymous sau đó (mặc dù lập luận này là không sử dụng)

   1E3:: sau đây, nếu có ngoại lệ xảy ra:

     trở về []

    thử:

    ⍕4 8 15 16 23 42 xâu chuỗi các số cần thiết

    ⍞≡ nhắc nhở đầu vào và so sánh với điều đó (đưa ra 0 hoặc 1)

     là người đầu tiên mà nhiều ɩ ndices ( []hoặc [1] `

   đi đến dòng đó (1 nếu [1], tiếp tục trên dòng tiếp theo nếu [])

:End kết thúc vòng lặp bên trong; tiến hành với giây tiếp theo của thời gian chờ hiện tại

t=3 đây là thời gian chờ thứ hai (0 hay 1)?

 ... ⌽⍨ xoay rằng nhiều bước sau:

  'Enter, Quick!' 'Sorry, the world has ended with status code -1' ngầm in văn bản phù hợp

 tiết lộ (để in mà không dẫn đầu và dấu cách)

:End kết thúc vòng ngoài: sau cảnh báo, vòng lặp; Sau khi in "Xin lỗi," hãy tiến hành chấm dứt chương trình


0

C ++ (gcc) , 395 byte

Biên dịch trên Linux yêu cầu -pthreadchuyển đổi. MinGW không có.

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

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.