Побачимося в іншому житті, братане!


12

Більшість із нас ВИМОГА шанувальників там пам’ятають комп’ютер, що Десмонд повинен був набирати символів «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.

Це кодовий гольф, тому найкоротша відповідь (у байтах), яка виконує це завдання, виграє! Щасти!


Я трохи відредагував питання. Не соромтеся відкатати будь-які зміни, які ви не хочете.
Мартін Ендер

2
Повинні бути бонусні бали за виведення правильних ієрогліфів.
курйозданні

Перечитавши виклик, я вже не впевнений, чи правильно його витлумачив. Що повинно відбутися після того, як "світ закінчився"?
Денніс

1
Як загублений ботанік, я відчуваю, що зобов'язаний зазначити, що Десмонд буде попереджений про введення цифр за 4 хвилини (240 секунд) до того, як таймер закінчиться.
Джеймс

Відповіді:


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 був метод 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є довгим.


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(еконди) 1наскрізь і всі until ndices доt

  ⎕RTL←1 встановити R imponse T ime L imit на 1 (секунду)

  {} Застосувати до цього наступну анонімну лямбда (хоча цей аргумент не використовується)

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

Спробуйте в Інтернеті!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.