또 다른 삶에서 보자!


12

우리 대부분의 LOST 팬들은 Desmond가 108 분마다 "4 8 15 16 23 42"문자를 입력해야했다는 것을 기억하거나 세상은 끝날 것입니다.

여기서 과제는 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
올바른 상형 문자를 출력하려면 보너스 포인트가 있어야합니다.
curiousdannii

과제를 다시 읽은 후에는 더 이상 올바르게 해석했는지 잘 모르겠습니다. "세상이 끝난 후"어떻게됩니까?
Dennis

1
잃어버린 대가로, 나는 Desmond가 타이머가 다 떨어지기 전에 4 분 (240 초)에 숫자를 입력하는 것에 대해 경고 할 것임을 지적해야합니다.
제임스

답변:


10

bash, 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

현대 브라우저 자바 스크립트, 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

그루비, 244 또는 228 바이트

기다릴 시간에 대한 인수를 취하는 nextLine 메소드가있는 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( 경제)1t

  ⎕RTL←1 설정된 R 저 응답 T IME L의 (제 1)에 IMIT을

  {} 다음 익명 람다를 여기에 적용하십시오 (이 인수는 사용되지 않더라도)

   1E3:: 예외가 발생하면 다음과 같습니다.

     반환 []

    시험:

    ⍕4 8 15 16 23 42 필요한 숫자를 세다

    ⍞≡ 입력하라는 메시지를 표시하고 그와 비교 (0 또는 1 제공)

     많은 숫자 가 처음으로 퍼져 나감 ( []또는 [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.