задача
Вам будет дана строка на входе, состоящая только из символов от a
to z
, т.е. вход будет соответствовать регулярному выражению /^[a-z]*$/
.
Ваш вывод должен быть законченной программой на том же языке, исходный код которого содержит входные данные и представляет собой правильный quine.
пример
Ваша программа будет получать ввод abc
и вывод:
...abc...
Выше должно быть полная программа на том же языке, которая не требует ввода и вывода:
...abc...
т.е. он сам выводит.
счет
Это код-гольф . Кратчайший ответ в байтах побеждает.
Ответы:
Python 3,
5761 байтПринимает базовый Python 3 Quine отсюда и заменяет имя переменной на вход.
Примечание: Как отметил Hyper Neutrino в комментариях, это не работает для зарезервированных ключевых слов , таких какfor
,if
и т.д.Добавление символа, который не заканчивается ни одним из зарезервированных ключевых слов, таких как
'x'
или любое число, исправляет это. (Эрджан Йохансен).источник
"for"
или любого другого зарезервированного слова в Python.'x'
.Желе , 9 байт
Генератор
Попробуйте онлайн!
Как это устроено
Куайн
Если введено
quine
, генерируется следующая программа.Попробуйте онлайн!
Как это устроено
Это стандартное желе-квин. Первый,
устанавливает левый аргумент и возвращаемое значение в строку
"quine\nØv"
.Затем
Ṙ
печатает строковое представление (код из предыдущего блока) и возвращает неизмененную строку.Затем
v
принимает левый аргумент и передает его в качестве ввода в программу JellyВо всех программах Jelly выполняется только основная ссылка (определенная в последней строке), поэтому первая строка полностью игнорируется.
Наконец,
Øv
устанавливает возвращаемое значение равным"Ṙv"
, которое неявно печатается после завершения внешней программы.источник
Haskell , 51 байт
q
берет строку и возвращает строку.Попробуйте онлайн!
Пример вывода для
putStr$q"test"
:Попробуйте онлайн!
fst
для извлечения основного текста.show
чтобы превратить весь кортеж в строку.mappend
для объединения двух предыдущих функций. Удобноmappend
для двух функций дает функцию, которая применяет каждую функцию к своему аргументу и объединяет результаты сmappend
типом результата (здесь конкатенация строк).источник
Недогрузка , 14 байтов
Попробуйте онлайн!
Используйте как
(test)(~aSaS(:^)S):^
- что само по себе является квинем.Как это устроено
(test)
и(~aSaS(:^)S)
являются строковыми литералами, поэтому поместите себя в стек, с последним сверху.:
дублирует(~aSaS(:^)S)
строку в верхней части стека, а затем^
запускает ее содержимое как подпрограмму.~
поменяет местами два верхних элемента в стеке, так что теперь(test)
это самый верхний элемент .a
Заворачивает(test)
в дополнительные скобки.S
берет строку((test))
сверху стека и печатает ее без внешних скобок (которые являются просто буквальным синтаксисом).aS
печатает оставшиеся(~aSaS(:^)S)
в стеке аналогичным образом (с круглыми скобками).(:^)S
печатает финал:^
.источник
)(
Я не думаю, что это действительно работает как вход.a
-z
.Недогрузка , 14 байтов
Попробуйте онлайн!
Отличный подход от другого ответа Underload; вместо того, чтобы быть квинном, он создает квайн. Интересно, что получается одинаковое количество байтов. Это функция, которая берет свой аргумент из стека и выводит на стандартный вывод.
объяснение
Результирующая функция выглядит так:
Другими словами, он печатает строковый литерал, содержащий себя, а затем
:^
. Это явно квинна (потому что то, что было только что напечатано, совпадает с кодом, который мы выполнили, чтобы запустить его в первую очередь).источник
a
, если вы не возражаете против ошибки ошибки сегментации, которая выводится в stderr, когда вход содержитa
.(
будучи символом, который появляется на входе, все программы обязательно будут ничего не делать или аварийно завершаться. Я даже не думаю, что это специфично для TIO; программа недействительна, но она уже выдает желаемый результат в момент сбоя.V , 9 байт
Попробуйте онлайн!
Это модификация стандарта V quine , и я горжусь тем, что это всего на один байт длиннее.
HexDump:
Объяснение:
Затем запись неявно останавливается и воспроизводится. Это сгенерирует следующий вывод:
Так
j
как воспроизведение макроса прервется, ничегоHello
не запустится.источник
Python 2, 38 байт
Хотя ввод требуется только для поддержки
a-z
, он должен работать с любым однострочным вводом, который не содержит байтов NUL.Попробуйте онлайн
Для ввода
abc
полученная квинета:Попробуйте онлайн
источник
RProgN 2 , 15 байт
Разъяснения
Используя формат
где
%q
вводится qouted, строится квинат ароматакоторая является стандартной RProgN2-квиной,
{']C'.}]C
которая, прежде чем закончить, добавляет и уничтожает введенную строку.Попробуйте онлайн!
источник
Сетчатка , 14 байт
Количество байтов предполагает кодировку ISO 8859-1.
Попробуйте онлайн!
Для ввода
x
это выводит:объяснение
Вывод является незначительной модификацией стандартного quine . Мы просто используем регулярное выражение
|x
вместо пустого регулярного выражения. Поскольку|
все еще разрешено (и расставляет приоритеты) и пустое совпадение, на саму функциональность это не влияет, и, поскольку в немx
будут только буквы, гарантированно будет действительный синтаксис регулярного выражения.Печать этого на самом деле использует технику, которая похожа на саму квинну. Чтобы избежать дублирования квин, мы вставляем
¶\(*S1`|
только один раз в начало строки. Это ровно половина исходного кода. Чтобы напечатать его дважды без перевода строки, мы используем конфигурацию\(\
, которая оборачивает всю программу в группу и заставляет как сам этап, так и группу, содержащую ее, печатать результат без перевода строки.источник
Japt , 14 байт
Проверьте это онлайн! Для входа
abc
, выходовкоторый выводит сам. Проверьте это онлайн!
объяснение
Это расширение стандартной строки Japt с поддержкой полезной нагрузки:
Разница лишь в том, что мы добавляем
ª`abc
в конце, что в JavaScript в основном||"abc"
. Так как результатом первой части всегда является непустая строка (правда),||
никогда не запускается.Есть несколько альтернативных версий одинаковой длины:
источник
CJam ,
1614 байтовПопробуйте онлайн!
Как это устроено
Который выводит что-то вроде
"`_~\"test\";"`_~"test";
.источник
JavaScript, 21 байт
источник
Perl 5 , 35 байт
Попробуйте онлайн!
источник