Вызов:
Создайте программу или функцию, которая принимает целочисленный ввод, который выводит новую программу / функцию, как указано ниже.
Входные данные:
Целое число n
: время в секундах до взрыва бомбы замедленного действия.
Вывод:
Исходная программа, у которой на n
входе было время в секундах , выведет новую программу / функцию, которая выполняет следующие действия:
- Был
n
приняты секунды , так как предыдущая программа была запущена? РаспечататьBOOM!
- Иначе: Распечатайте программу / функцию, которая при запуске сама сбрасывает таймер обратно в
n
секунды (и действует так же, как первая выведенная программа / функция).
ПРИМЕЧАНИЕ. Это не совсем то же самое, что первая выведенная программа / функция (по крайней мере, в большинстве языков), потому что время запуска изменилось (см. Поясняющий пример ниже).
Пример псевдокода:
Скажем, оригинальная программа ABC
и ввод в 60
секундах:
ABC
и 60
выходы DEF(60)
.
- Если
DEF(60)
запустить в течение 60 секунд, он выдастDEF_G(60)
, что действует точно так же, какDEF(60)
и с новым временем запуска. - Если
DEF(60)
запустить через 60 секунд, будет выведеноBOOM!
.
Уточняющий пример, что я имею в виду под «временем начала»:
- Базовая программа с входными
60
секундами запускается при12:00:00
. Он выводит первую программу вывода с начальным временем12:00:00
. - Эта первая программа вывода со временем
12:00:00
запуска выполняется в12:00:45
. Он выводит вторую программу вывода с начальным временем12:00:45
. - Эта третья программа вывода со временем
12:00:45
запуска выполняется в12:01:25
. Он выводит четвертую программу вывода со временем запуска12:01:25
. - Эта четвертая программа вывода с начальным временем
12:01:25
запуска12:05:00
. Это будет выводитьBOOM!
.
Обратите внимание, как первый вывод будет печататься BOOM!
после 12:01:00
, но программа вывода продвинулась, поэтому, несмотря на то, что она находится 12:01:25
на шаге 3, она все равно будет выводить следующую программу вместо BOOM!
(поскольку программы вывода на выход имеют время запуска выше этой первой программы вывода) ,
Правила соревнований:
- Применяются правила Quine по умолчанию.
- По крайней мере,
n
секунды должны были пройти. Таким образом, если ввод60
и время запуска было12:00:00
, то12:01:00
он все равно выведет программу v2, но на12:01:01
него выведетBOOM!
. - Выходные программы не будут принимать никаких входных данных ( за исключением пустого неиспользуемого параметра, если он короче ). Время запуска должно быть задано следующим программам в виде «жестко запрограммированного» значения (именно поэтому выходные данные выходной программы не совпадают с предыдущими (в большинстве языков).
- Только размер вашей основной программы / функции считается в байтах.
- Вы можете вывести программу / функцию либо в виде строки (или в сопоставимом разумном формате, таком как байт / массив / список символов), либо в качестве функции, если ваш язык поддерживает это, или в других разумных форматах (пожалуйста, спросите, если не уверены).
Основные правила:
- Это Код-гольф, так что кратчайший ответ в байтах выигрывает.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Ответы:
JavaScript, 51 байт
Тест в браузере
старая версия
Тест в браузере
источник
return()=>
. И хотя я почти никогда не программировал на JavaScript, я проверил ваш тест-скрипт и даже изменил его, добавив тест для функции вывода функции: протестируйте его здесь с помощью четвертого теста функции-функции. Кажется, все работает, и это удивительно мало, я мог бы добавить, поэтому +1 от меня. PS: в правилах сказано, что она должна выводить строку вместо функции. Но я немного изменю правила, чтобы разрешить и то, и другое. Не могли бы вы изменить скрипт, чтобы он также выводил функции для регистрации во время теста?f=(t,o=setTimeout(_=>o=0,t*1e3))=>_=>o?f(t):'BOOM!'
должен работатьJavaScript, 53 байта
Показать фрагмент кода
Старый ответ (возвращение должно быть строкой)
JavaScript, 78 байт
Показать фрагмент кода
источник
Java 8, 234 байта
Извините, что опубликовал свой собственный вызов прямо сейчас. В основном это означало дальнейшее разъяснение вопроса, и я сомневался, добавлять ли его в вопрос сам или публиковать как ответ (и решил опубликовать его как ответ, чтобы не загромождать сообщение для вызова).
И хотя я хотел бы сказать, что это тоже что-то, что можно (пытаться) победить, об этом даже не стоит упоминать, потому что, ну ... Java (почти) всегда побеждена. ;п
Попробуйте онлайн.
Пример вывода:
Попробуйте выведенную лямбда-функцию здесь.
Пример вывода:
Объяснение:
Основная функция принимает целочисленный ввод и возвращает строку. Он в основном возвращает функцию, которая является квинной, с целочисленным вводом и временем запуска (в секундах как метка времени) в виде жестко закодированных значений.
Основная функция:
n=60
был использован в примерах ниже:Первая программа вывода:
Вторая программа вывода:
Так же, как первая программа вывода, за исключением того, что
70492.687613232
заменяется на70548
.источник
Perl 5+
-p
, 88 байтВыходные программы должны работать с
-M5.010
дляsay
, но не-p
.Попробуйте онлайн!
источник
05AB1E , 50 байтов
Определенно можно играть в гольф немного больше, но довольно сложно вывести полукухину, которая выводит программу квин с измененными значениями.
Попробуйте онлайн или попробуйте 20-секундный пример запуска .
Объяснение:
Пример результирующей программы:
Который основан на Куайна по умолчанию:
"34çìD«"34çìD«
.Посмотрите эту подсказку 05AB1E (раздел Как пользоваться словарем? ), Чтобы понять, почему
‘ÒÞ!
это так"BOOM!"
.ПРИМЕЧАНИЕ: причина пробела в
çì
том, что в противном случае он интерпретируется как словарь-строка (triumph
) из-за’...’
.источник