別の人生でお会いしましょう、ブラザ!


12

私たちのほとんどのロストファンは、デスモンドが108分ごとに「4 8 15 16 23 42」の文字を入力しなければならなかったコンピューターを覚えています。

ここでの課題は、入力4 8 15 16 23 42が108秒ごとに入力されるか、メッセージを表示することを要求することにより、同じことを行うプログラムを作成することです。

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

これはコードゴルフなので、このタスクを達成する最短の回答(バイト単位)が勝ちです!幸運を!


質問を少し編集しました。不要な変更をロールバックしてください。
マーティンエンダー

2
正しい象形文字を出力するためのボーナスポイントがあるはずです。
curiousdannii

課題を読み直した後、それを正しく解釈したかどうかはもうわかりません。「世界が終わった」後はどうなりますか?
デニス

1
失われたオタクとして、タイマーが切れる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

最新ブラウザの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が待機時間の引数を取るnextLineメソッドを持っていることを誤って思い出したので、これは簡単だと思いました。これを行うメソッドが見つからなかったため、2つのスレッドでこれを実装しました。少しかさばります。しかたがない。

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 2回ループし、1回はt(timput)で100、次にtasで8

:For s:In⍳t 用s(econds)1を通じて、すべてのɩ ndicesまでt

  ⎕RTL←1Rを  設定します esponse T IME Lの(第2)1 imitを

  {} 次の匿名ラムダをそれに適用します(ただし、この引数は使用されません)

   1E3:: 以下で、例外が発生した場合:

     帰る []

    試してください:

    ⍕4 8 15 16 23 42 必要な数字を文字列化する

    ⍞≡ 入力を促し、それと比較する(0または1を与える)

     多くのその最初のɩの(ndices[]または[1] `

   その行に移動します(1の場合[1]、次の行に進みます[]

:End 内側のループの終わり。現在のタイムアウトの次の秒に進みます

t=3 これは2番目のタイムアウト(0または1)ですか?

 … ⌽⍨ 次のように多くのステップを回転させます。

  'Enter, Quick!' 'Sorry, the world has ended with status code -1' 適切なテキストを暗黙的に印刷する

 公開(先頭および末尾のスペースなしで印刷する)

:End 外側のループの終わり:警告の後、ループ。「Sorry…」を印刷した後、プログラムを終了します


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.