Ваша задача сегодня состоит в том, чтобы установить ограничение по времени для получения входных данных - задача, которую я нашел довольно раздражающей для большинства языков.
Вы создадите функцию программы, которая запрашивает ввод данных пользователем. Сразу после ввода данных пользователем, напечатайте сообщение input received
и завершите выполнение / возврат. Однако, если пользователь ожидает ввода более 10 секунд, выведите сообщение no input received
и завершите выполнение / возврат.
Входные данные должны быть из stdin
(консоли) или эквивалентными, а не аргументами функции или программы, однако выходные данные могут быть либо для stdout
возвращаемого значения вашей функции, либо для любого другого принятого метода вывода.
Вы можете запросить любой объем ввода, это может быть один символ, строка, слово или любой другой метод, самый короткий на вашем языке, если он ожидает хотя бы один символ.
Вы должны выводить, как только вход получен, а не через 10 секунд.
По истечении 10 секунд вы должны закончить, вы не можете продолжать ждать ввода послеno input received
как был напечатан.
Вы можете предположить, что ввод не прошел за 10 секунд до того, как текст был напечатан на экране, так как это очень маленькое окно. Вы также можете предположить, что встроенный эквивалент вашего языка sleep
последовательно, абсолютно совершенен.
Это код-гольф , побеждает меньше байтов!
sleep
функции вашего языка полностью соответствуют 100% времени.Ответы:
Баш, 38 байт
При этом используется
-t
опция (timeout) для bashread
, что приводит к сбою и возврату ненулевого кода выхода, если в течение указанного количества секунд не было введено никаких данных.источник
Haskell,
9789 байтЕсли
timeout
время ожидания возвращается,Nothing
иJust Char
(Char
потому что мы используемgetChar
) в противном случае. Это возвращаемое значение преобразуется в"no "
или""
функциейmaybe "no " mempty
. Добавить"input received"
и распечатать.Редактировать: @BMO предложил
maybe
и сохранил несколько байтов.источник
g
сlet
:,let g Nothing="no ";g _=""
тогда вызов функцииtimeout....
у меня работает нормально.g
наmaybe"no "(pure"")
более короткий и даже встроенный - сэкономив вам 6 байт.mempty
а(pure"")
не еще короче.POSIX C99,
7163 байтаUngolfed:
Так
poll
как в случае успеха вернет 1, мы умножим результат на 3 и переместим строку соответственно. Затем мы используем тот факт, чтоstruct pollfd
имеет следующий макет:и что
STDIN_FILENO
это0
,POLLIN
является1
заменитьpfd
сint pfd[] = {0,1}
, что мы , наконец , сделать соединение litteral (как разрешено C99).источник
poll.h
заголовок не является частью языкового стандарта C99.Applescript, 113
Applescript на самом деле не читает из STDIN. Надеюсь, что
display dialog
приемлемо здесь:источник
APL (Дьялог) ,
4140 байтЭто анонимная молчаливая функция, для запуска которой требуется фиктивный аргумент .
'no input received'
полная строка↓⍨
отбросить столько символов с начала, сколько было возвращено{
явная анонимная функция (⍵
обозначает аргумент)⎕RTL←10
установить R esponse T IME L IMIT до десяти секунд3*⍨
возведите это число (десять) до степени три (тысяча означает «все»)::
за этими исключениями (все),0
вернуть 0⋄
пытаться:⍞
получить вход3⊣
откажитесь от этого и вместо этого верните 3}
конец функции (обратите внимание, что аргумент⍵
никогда не упоминался)источник
Perl ,
7467 байтСтарая версия
(Запустить через perl -M5.10.1 ...)
источник
\n
.-M5.10.1
. Вы можете просто заменить-e
на-E
. (если вам нужно-M5.10.1
, вам придется добавить штраф к вашему счету)\n
это происходит из-заdie
поведения: «Если последний элемент LIST не заканчивается новой строкой, текущий номер скрипта и номер строки ввода (если есть) также выводятся на печать, и предоставляется новая строка». Таким образом, без него будет отображаться «вход не получен в строке -e 1». Но, конечно, это может быть буквальный разрыв строки в строке. Кроме того, пространство междуdie
иsay
и их параметры не нужны. То же самое для финала;
. И<>
достаточно прочитать со стандартного ввода.eval
читаете из STDIN, вы можете избежать необходимостиdie
сообщения. На самом деле, ошибка во время выполнения работ точно так же:$SIG{ALRM}=sub{&0};alarm 10;say'no 'x!eval'<>','input received'
.Perl 6 ,
7266 байтПопробуй без ввода
Попробуй с вводом
Попробуй без ввода
Попробуй с вводом
источник
start
и{
?start
, так что нет..new
егоC #,
180171148131 байтСохранено 17 байт благодаря @VisualMelon.
Полная / Отформатированная версия:
источник
namespace
и неusing
директива?using
Thread.Join(int)
(избавиться отc
потерянных скобок и т. Д. И т. Д.):var t=new System.Threading.Thread(()=>System.Console.ReadKey());t.Start();return(t.Join(10000)?"":"no ")+"input recieved";
(Похоже, VB.NET уже делает это)1e4
но этоdouble
и мне нужно,int
поэтому мне нужно сделать(int)1e4
:( Хорошая идея, хотяTI-BASIC,
8477 байтов-7 благодаря @ kamoroso94
Ожидание, пока не будет нажата цифра.
Я пытаюсь понять, как играть в гольф
{72,73,74,82,83,84,92,93,94}
. Это занимает много места.источник
Repeat K or 10=checkTmr(T
сделайте.:4-3not(K:sub("NO INPUT RECEIVED",Ans,18-Ans
Shift
ключ на компьютере. Кроме того, сокращение последних 4 строк с помощью вашего метода фактически дает тот же счетчик байтов, что и мой. Мне нравится ваш метод, хотя.or
в вашем повторном утверждении используйте это вместо -7 байтов:abs(int(.1K)-8)≤1 and 1≥abs(3-10fPart(.1K
NodeJS,
105103101 байт-2 байта благодаря @apsillers
-2 байта при переходе
console.log()
вexit()
Запустите, сохранив файл и запустив его с узлом, или запустите его прямо из командной строки, выполнив
node -e "<code>"
источник
console.log()
вызов в параметрexit()
. Сейчас на два меньше.JavaScript (ES6) + HTML,
86848279 + 11 =97959390 байтПопытайся
Требуется закрытие
>
наinput
для работы в сниппет.источник
10
вместо1e4
?10
было бы 10 миллисекунд, задача вызова конкретно говорит 10 секунд , что составляет 10000 миллисекунд, следовательно1e4
.10 != 1e4
потому что я дуракVB.Net - 174 байта
Завтра выйдет версия COBOL ;-)
источник
:
. Это занимает то же количество байтов, что и разрыв строки, так что это только снижает читаемость без улучшения результата игры в гольф.:
подстановка разрыва строки может быть такой, что шаговый вызов может быть объявлен встроенным без повторения - но, тем не менее, я не уверен, мой основной язык - VBA, который не поддерживает многопоточность или чтение из консоли <strike> < / strike> непосредственное вспомогательное окно во время определения функции или вызова: PGo, 149 байт
источник
AHK ,
6765 байтBlauhirn спас 2 байта
AHK имеет встроенный тайм-аут для полей ввода.
Я попытался стать умным и использовать
!o
вместо,ErrorLevel
но это не получится, если пользователь введет значение Фальси.Почти половина ответа - это только названия команд и фиксированный текст.
источник
Timeout
- почти последний параметр:InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]
s:=errorLevel?"no ":
Python3,
100898371 байтСначала попробуйте в гольф.
-4 за
any()
, -7 за нарезку, спасибо @ user2357112!-6, получить
select()
отpty
вместоselect
.источник
"no input received"
строки:"no input received"[3*bool(...):]
.any(...)
вместоbool(...[0])
.pty
Модуль доступен только на платформах Линукса, но я только использовать его , потому что его имя коротко , и это делаетselect
доступно. Версия 2, вероятно, лучше работает на Windows.PowerShell, 110 байт
источник
Python 3, 158 байт
Я попытался запустить ответ Сета на Python 3, но в Windows он выдает
ModuleNotFoundError: No module named 'termios'
, и, поскольку я не могу прокомментировать его ответ об этом, я решил вместо этого найти решение, которое должно быть независимым от платформы.Я впервые играю в гольф, поэтому уверен, что это можно улучшить.
источник
Tcl, 99 байт
источник
SmileBASIC 3, 74 байта
«Принимает ввод», ожидая любого нажатия кнопки (которое должно учитываться как ввод).
источник
Царапина 2 / 3.х, 41 балл ( Пояснение )
1: когда GF нажал
1: спросите [] и подождите
1 + 14 символов: скажем [вход получен]
1: остановка [все v] (примечание: так как «все» было настройкой по умолчанию, я посчитал блок как 1)
1 + 2 цифры: ждать (10) секунд
1 + 17 символов: говорят [вход не получен]
1: остановить [все v]
источник
> <> , 43 + 6 = 49 байт
Попробуйте онлайн!
+5 для
-t.08
флага, который устанавливает отметку в 0,08 секунды, и +1 дляa
флага, который считает пробелы и пропущенные инструкции в виде отметок.Программа проверяет ввод примерно раз в секунду и выходит из цикла, если вход обнаружен. Если вход не получен, он выходит из цикла снизу, добавляя
no
к началу строки. Начальный/
необходимо убедиться, что последняя проверка на вход точно находится на отметке 10 секунд.Затем на печать самой строки уходит около 5-6 секунд.
источник
-at.08
чтобы сохранить байт.Java 1.4+, 284 байта
Ungolfed:
Пожалуйста, не предлагайте улучшения Java для конкретной версии, это общий ответ Java, который работает во всех в настоящее время стабильных средах Java (1.4 и выше).
Очень чертовски многословно ... Требуется улов, не могу его бросить. Системный импорт сбрасывает, как 5 байт ... Перегрузка также многословна, так что в итоге получается грязный, плохо выглядящий гольф.
источник
10000L
и нет10000
? Я думал, что целые автоматически преобразуются в длинные.Юлия 0,6 , 78 байт
Дольше, чем я ожидал. См. Комментарии для ссылки "TIO не получен".
Попробуйте онлайн!
источник
SmileBASIC,
7473 байтаПринимает 1 символ ввода.
И 39-байтовое решение, которое, вероятно, недопустимо (на самом деле не принимает ввод текста, просто есть OKкнопка, которую вы можете нажать)
источник