Задний план
echo
Программа настолько аккуратно. Вы можете сказать что-нибудь, и это повторяет ваши слова идеально, каждый раз! Как это круто! Неутешительно, это повторяет ввод все сразу, независимо от вашей скорости печати, которая не очень реалистична. Мы должны это исправить.
Задание
Ваша программа должна получать свои данные из STDIN или ближайшего аналога. Он должен читать строки от пользователя одну за другой, возможно, отображая какое-то приглашение, пока они не введут пустую строку. После этого он выводит строки в STDOUT или ближайший эквивалент в том порядке, в котором они были заданы. Последняя (пустая) строка не печатается, а последняя напечатанная строка не нуждается в конце новой строки.
Кроме того, программа должна сохранять временные интервалы между каждой строкой: если пользователю потребовалось x
несколько секунд, чтобы ввести строку, программе потребуется x
несколько секунд, чтобы ее распечатать. Это относится и к первой и последней строкам; пустая строка не печатается, но программа все равно ждет, прежде чем завершить работу.
пример
Вот пример сеанса с программой. Все действия, которые не производят текст, описаны в скобках, и (необязательно) приглашение отображается как >
.
[begin program]
> fhtagn[enter; 1.48s passed since starting program]
> yum yum[enter; 3.33s passed since previous enter]
> so cool![enter; 2.24s passed since previous enter]
> [enter; 0.23s passed since previous enter]
[wait 1.48s]fhtagn
[wait 3.33s]yum yum
[wait 2.24s]so cool!
[wait 0.23s, then end program]
Без действий сессия выглядит так:
> fhtagn
> yum yum
> so cool!
>
fhtagn
yum yum
so cool!
Правила и оценки
Время ожидания должно быть с точностью до 0,01 секунды (на практике, если обычный человек не может определить разницу, у вас все в порядке). Побеждает меньшее количество байтов, и стандартные лазейки запрещены. Если ваш язык имеет встроенную функцию именно для этой задачи, вы не можете ее использовать.
yum yum
, что было довольно громоздко.Ответы:
CJam,
4541393634 байтаКонечно, в онлайн-интерпретаторе это не имеет смысла, но работает в интерпретаторе Java.
Это не отображает подсказку.
объяснение
источник
JavaScript,
119112 байтНадеюсь найти еще пару байтов для вырезания.
источник
j=i=[]
(++
все еще будет работать!), Вамwhile
не нужно, так!=''
как это ложно! Так разочарован, я пропустилmap
! +1!=''
. Был обеспокоен, если вход был0
, но, кажется, справиться с этим хорошо. Я уже заметил[]
возможность увеличения, но я был глуп и пытался делатьj++
с этим. Делать++j
работает, так[]++
как, по-видимому, 0 XD Спасибо!do...while
в JS были петлиJavaScript, 120 байт
Нет шансов приблизиться к CJam с таким подходом, но простой сценарий.
источник
Pyth, 68 байт
Потеряно много байтов на вызове
sleep
, так как Pyth не имеетsleep
функции.источник
Руби, 74
Трюки:
*a
в первой строке инициализируется пустой массив. Я мог бы использовать$*
вместо этого, но это слегка схематично, так как он заполнен некоторыми вызовами и только экономит мне байт.$/
является новой$_
строкой и является последней строкой, полученной с помощьюgets
.Редактировать: сон в конце стоит еще 20 байтов, вероятно, способ проиграть
источник
Time.now
достаточно раз, чтобы использоватьdef n;Time.now;end
, сохраняя целые 2 байтаПитон 3, 124
Работает только на платформах Windows
Хранение ввода и времени в отдельных списках стоило мне еще 3 байта . Вероятно, не лучший подход.
129-байтовая версия для Unix с благодарностью Mego :
источник
time()
вместо того,clock()
чтобы сохранить 2 байта?SWI-Пролог, 185 байт
Здесь, вероятно, есть много для игры в гольф, но пока это подойдет ...
источник
PowerShell,
26119012195 байтРеквизиты TessellatngHeckler и Tomkandy для помощи в гольф и вдохновения
Это очень похоже на концепцию 121-байтовой версии ниже, мы просто динамически создаем и строим список объектов, вместо того, чтобы проходить через цикл while для сохранения их в явном массиве
$a
. В обоих случаях этот список объектов передается по конвейеру в один и тот же цикл foreach|%{...}
. Индексирование в селектор массива результата на($b=!$b+!$_)
этот раз сформулировано для исключения следующихif($_){$_}
итераций, что позволяет сэкономить еще несколько байтов.Предыдущий, 121 байт
Расширено и объяснено:
Предыдущий, 190 байт
Предыдущий, 261 байт
Святое многословие, Бэтмен! Давайте разберемся с этим:
источник
$a=1,1;while($a[-1]-ne""){$a+=Measure-Command{$b=read-host};$a+=$b};$i=2;while($i-lt$a.length){sleep -m $a[($i++)].totalmilliseconds;$a[($i++)]}
@
из этого массива, так как он не нужен в этом контексте, поэтому до 121 .$($l=1;while($l){Measure-Command{$l=read-host};$l})|%{($_,(sleep -m($_.Ticks/1e4)))[($b=!$b+!$_)]}
- и с переключением на тумблер, так что когда строка пуста, она не переключается, а вместо этого спит - 98do{...}while($l)
петлей и бросьте,$l=1;
чтобы получить 95 )Perl 6, 70 символов
Интерпретатор Perl 6 определяет только три символические переменные (в отличие от сумасшествия Perl 5). Чтобы быть точным, то
$/
,$!
и$_
. Эта программа использует их все, чтобы избежать затрат на объявление переменныхmy
.get
читает строку из STDIN. Он не содержит перевода строки, в отличие от Perl 5.now
Встроенный возвращает текущее время. При вычитании это дает интервал, который может быть передан в строку.Метод, в котором ничего не осталось (как
.push
и.map
в этом коде), работает$_
.Используя
repeat while
цикл (известный какdo while
в других языках программирования), Perl 6 записывает текущую временную метку$/
и помещает полученную строку (которую он также сохраняет$!
), а также разницу между текущим временем и временной меткой$/
. Из-за порядка параметровnow
не рассчитывается до получения строки.В
while
проверяет состояние , если строка не пуста (в Perl 6,"0"
это истинное значение, в отличие от Perl 5).После того, как я получаю все метки времени и линии, я просто предоставляю те для
map
обратного вызова, который немного спит и говорит, что было сказано.источник
Groovy, 202 байта
Radical.
Безголовая версия:
источник
JavaScript (ES6) 102
Объединение усилий Mwr247 и Dom Hastings (CW)
источник
MATLAB,
10799И безглым
Это не будет на 100% точным по времени, так как не учитывает время, затрачиваемое на отображение каждой строки, но это должно быть довольно быстрым, поэтому по времени это должно быть довольно близко.
После быстрого пересмотра я сохранил несколько байтов, удалив двухслойный массив глубоких ячеек. Оказывается, все, что мне было нужно, -
;
это правильно разделить его при упаковке.источник
Java, используя версию 1.04 этой библиотеки , 385 байт
источник
Cache ObjectScript, 123 байта
Как обычно, это предполагает чистую таблицу символов перед запуском
d r
.Эта проблема не может быть решена в ANSI MUMPS, поскольку стандарт ANSI требует только разрешения второго уровня для встроенного времени
$H[OROLOG]
. К счастью, Intersystems Caché, которая в настоящее время в отрасли платформу для свинка, обеспечивает в реализации определенных$ZT[IME]S[TAMP]
сущностных , которая обеспечивает разрешение микросекунд-уровня.(Оценка была раньше 105 байтов, но была ошибка.)
источник
C ++ 11,
343338 байтХотел посмотреть, сколько байт потребуется для кода в c ++. Гораздо больше, чем я ожидал. Может быть, я слишком сложное решение.
Посмотрим, смогу ли я как-нибудь уменьшить это.
источник
#include
s и объявление типа дляmain
. Это 7 байтов - не много, но начало. Вы также можете использовать,auto
а неstring
дляs
.c
этого нам не нужно указывать это. Я пытался изначально использоватьauto s
... но похоже, что он преобразован вconst char *
и нетstd::string
. Интересно, смогу ли я создать псевдоним дляwhile
.while
использования#define
может быть.Баш,
9190 байтЭто создает временный файл
t
. Он перезапишет существующий файл с тем же именем.Сама идея довольно короткая, но работа со специальными символами на входе добавляет около 15 байт ...
источник
VBA,
233228 байтЯ уверен, что это может быть много в гольфе. они не указали, сколько входных данных, поэтому я жестко запрограммировал длину моего массива, потому что тогда он короче
Redim preserve
.Вход через всплывающее окно, выход
debug.print
потому чтоmsgbox
создает MODAL и останавливает код.Я не знаю, как проверить, если это с точностью до 0,01 с. Может быть, кто-то может проверить, но я даю команде wait номер таким образом, что она ДОЛЖНА использовать миллисекунды, но VBA не известна тем, что она должна делать.
If goto
Может быть в состоянии быть замещен хорошо golfedDo Loop While
.источник
SmileBASIC, 122 байта
Я думаю, что это можно сделать немного короче.
источник
C UNIX, 272 байта
Детальнее
источник
Баш, 22 байта
Затем введите ввод и нажмите ввод.
источник