兄弟,再见!


12

我们大多数人迷失了记忆,他们记得戴斯蒙德必须在每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

这是代码高尔夫球,因此完成此任务的最短答案(以字节为单位)将获胜!祝好运!


我已经编辑了问题。随意回滚不需要的任何更改。
马丁·恩德

2
输出正确的象形文字应该有加分。
curiousdannii

重新阅读挑战后,我不确定我是否正确理解了挑战。“世界终结”之后会发生什么?
丹尼斯

1
作为一个迷失的书呆子,我有义务指出,在计时器用完之前的4分钟(240秒)内,将警告Desmond输入数字。
詹姆斯

Answers:


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方法需要等待多长时间,因此我认为这很容易。我找不到能做到这一点的方法,所以我用两个线程实现了这一点。有点笨重。那好吧。

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,然后为tas 8

:For s:In⍳t 对于s(econds)1通过所有的ɩ ndices直到t

  ⎕RTL←1 所设定的- [R esponse Ť IME 大号 IMIT为1(第二)

  {} 对此应用以下匿名lambda(尽管未使用此参数)

   1E3:: 在以下情况下,如果发生任何异常:

     返回 []

    尝试:

    ⍕4 8 15 16 23 42 整理所需的数字

    ⍞≡ 提示输入并与之进行比较(给出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();}

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.