Напишите программу (или функцию) (назовем ее P1), которая при запуске выводит другую программу P2 на том же языке и ровно на 1 байт длиннее P1.
Программа P2 при запуске должна вывести третью программу P3, которая на 1 байт длиннее P2. P3 должен выводить программу P4, которая на один байт длиннее P3 и т. Д. То же самое для P5, P6, ..., P∞.
Цепочка программ должна идти бесконечно или в такое место, где интерпретатор больше не может справиться (но должен оставаться теоретически верной программой на языке)
правила
- Стандартные лазейки запрещены
- Все программы в цепочке должны быть на одном языке
- Нет данных. Вывод идет в стандартный вывод или возвращаемое значение функции
- Программа должна завершиться через некоторое время. Программа, которая прекращает генерировать выходные данные после определенного промежутка времени, но никогда не завершает свою работу, не квалифицируется
Победит самая короткая программа P1 в байтах на каждом языке!
"puts <<2*2,2\nputs <<2*2,2\n\n2"
увеличивается на 2 на каждой итерации в Ruby. Я не мог найти ничего лучше. : - /. Интересный вызов!Ответы:
JavaScript (ES6),
1412 байт-2 байта благодаря @Shaggy
Тестовый фрагмент
Показать фрагмент кода
источник
"f=_"
дополнительный символ_
перед именем параметра, что приводит к увеличению его длины при каждой итерации.7 , 4 байта ASCII
Попробуйте онлайн!
Я знаю, что 7 обычно не кодируется в ASCII, но на этот раз это более удобное кодирование, поэтому мы добавляем 1 байт при каждом запуске, а не 3 бита.
Я также не уверен, считается ли это обманом или нет. (Обычно неясно, обманывает ли 7 quine, так как он перекрывает границу несколькими способами.) Вы можете привести приличный аргумент, который
0
кодирует6
, но в целом неясно, откуда берутся результирующие символы «в 7, потому что у него так много, довольно странных, неявных поведений.Эта программа печатает себя с
1
добавлением, и будет делать это, даже если вы добавите число1
s к нему. Вот откомментированный след отладки160311
:(В программе ничего не
|
осталось, поэтомуe
немедленно выйдет из программы как побочный эффект, означающий, что финальные7
s никогда не запускаются).Основная путаница в том, откуда берутся все символы, состоит в том, что большинство команд в 7 просто выдают данные при запуске, а затем
6
пытаются восстановить последовательность команд, которая выдаст данный фрагмент данных; это часто заканчивается близко, но не идентично оригиналу. (В целях цитирования вы обычно пишете программу на 7 таким образом, что результат будет почти одинаковым, обычно различаясь в начальных или конечных7
s.) Так, например,1
данные в данных становятся716
, что является самым простым способом добавить1
к текущей строке данных. Мы изначально создали его с16
другой (но похожей) последовательностью символов, разрушительно удаляя один из|
маркеры, с которых начинались данные. (Наверное, лучший аргумент в пользу того, что это не буквальная формула, состоит в том, что выходные данные отличаются от входных!)источник
Haskell ,
7466 байтРЕДАКТИРОВАТЬ:
<>
, затем -6 путем перемещения(10*)<$>
.Теперь используется новый свободный
<>
оператор (дляSemigroup
умножения требуется, чтобы GHC 8.4 работал без импорта.)Попробуйте онлайн! (Читы с импортом, поскольку TIO еще не имеет GHC 8.4.)
Как это работает
main=putStr$
является шаблоном для вывода следующего строкового значения.fst<>show
является функцией, которая принимает кортеж и возвращает строку, состоящую из первого элемента кортежа, объединенного со строковым представлением кортежа. Т.е.(10*)<$>
умножает последний элемент следующего кортежа на 10, добавляя цифру0
к его строковому представлению.источник
(<>)
(10*)<$>
.C (gcc) ,
134132 байтаНезначительная переделка канонической буквы С. Ужасно долго.
Попробуйте онлайн!
источник
Деление 2 , 7 байт
Попробуйте онлайн!
Стандартный квин Fission , но с дополнительным,
!
который печатает дополнительные 0x01 в начале кода на каждой итерации.источник
Пари / ГП , 35 байт
Попробуйте онлайн!
источник
Python 2 , 38 байт
Попробуйте онлайн!
источник
брейкфак , 420 байт
Попробуйте онлайн!
Это модификация «стандартной» сущности BrainFuck , с
.
концом в конце, которая добавляет дополнительную.
каждую итерацию.Сама квинна кодирует символы Brainfuck в виде набора шестнадцатеричных цифр: в частности, шестнадцатеричных цифр
c-0x2b
, которые обычно следующие:Кодировка охватывает два фрагмента кода:
>++[[>>+[>]++>++[<]<-]>+[>]<+<+++[<]<+]>>->[>]++++>++
выдвигает кодировку самой кодировки,[[<++++++++++++++++>-]<+++++++++.<]
обходит стек и печатает все.источник
Грязный , 9 байт
Попробуйте онлайн!
Если чтение исходного кода разрешено:
Грязный , 8 байт
Попробуйте онлайн!
Разъяснение:
Может быть действительным:
Грязный , 4 байта
Попробуйте онлайн!
Он печатает исходный код с завершающим переводом строки.
(И куча пробелов, из-за ошибки. Хотя без них все работает.)
Обратите внимание, что он работает только в собственном наборе символов, а не при использовании внешнего интерфейса UTF8 - поэтому, чтобы попробовать его на TIO, вам нужно заменить символ, который он выводит между символами
[]
s‼
, что является эквивалентом UTF8 для печати ,источник
Java 8,
162146 байтПопробуйте онлайн.
Попробуйте первую программу вывода ; Попробуйте вторую программу вывода ; Попробуйте третью программу вывода .
Объяснение:
quine -part:
String s
Содержит исходный код отформатирован.%s
используется для ввода этой строки в себя с помощьюs.format(...)
.%c
,%1$c
И34
используются для форматирования двойных кавычек.s.format(s,34,s)
складывает все вместеЗадание часть:
+1
добавляет 1 к неформатированной и отформатированной программе..replaceAll("1+$","");}
: Поскольку мы хотим увеличить количество байт программы только на единицу вместо двух, мы удаляем все завершающие 1 перед возвратом.источник
> <> , 9 байт
Попробуйте онлайн!
Вариация классической> <> формулы, которая просто добавляет еще одну команду dupe для копирования
#
вперед.источник
Perl 5 , 32 байта
Попробуйте онлайн!
источник
GolfScript , 9 байт
Попробуйте онлайн!
CJam , 9 байт
Попробуйте онлайн!
Я публикую оба этих решения в одном и том же ответе, поскольку они представляют собой просто тривиальные вариации друг друга и работают абсолютно одинаково. Они оба основаны на общей квине GolfScript
{'.~'}.~
(или{"_~"}_~
в CJam), которая описана более подробно, например, в моем предыдущем ответе.Разница лишь в том, что этот вариант добавляет
1
байт к концу своего вывода. Как это случается, любая строка1
s (или любой другой целочисленный литерал без начальных нулей) сама по себе является тривиальной формой как в GolfScript, так и в CJam, поэтому любые строки, уже присутствующие в конце кода выше, будут просто дословно скопированы в вывод. Поскольку GolfScript (и CJam) используют целые числа произвольной длины, это будет работать для произвольно длинных программ, по крайней мере, до тех пор, пока компьютер, на котором выполняется код, имеет достаточно памяти для его хранения.источник
Атташе ,
767261 байтПопробуйте онлайн!
Стандартный quine, который добавляет пробел в конец
x
после каждой итерации.Первые несколько итераций:
и т.п.
Атташе, 72 байта
Попробуйте онлайн!
Это просто вариант стандартного формата quine с переменной,
y
которая устанавливается10*y
после каждой итерацииПервые несколько итераций:
и т.п.
источник
Swift 4 , 89 байт
Включает завершающий перевод строки
Попробуйте онлайн!
источник
Haskell , 88 байт
Попробуйте онлайн! Увеличивается путем добавления
#
к строке данных.источник
show
больше, чем просто строку и используя сопоставление с образцом. Попробуйте онлайн!Stax ,
2018 байтЗапустите и отладьте его
Создает дополнительный пробел перед 2-й кавычкой при каждой итерации.
объяснение
Использует программу
"34s+cTZL "34s+cTZL
для объяснения.источник
JSTX , 4 байта
Попробуйте онлайн!
источник
Рунические чары , 6 байт
Попробуйте онлайн!
Прямая копия этого ответа на связанный вызов. Так уж получилось, что он увеличивался на 1 байт за каждую итерацию (сильным аргументом для этого вызова является его дублирование или наоборот).
источник
Желе , 11 байт
Попробуйте онлайн!
источник
Чудо , 33 байта
Интересный вариант нормальной квинны, который добавляет 1 после каждой итерации.
Прогрессирование:
объяснение
Одна из интересных частей этой статьи - Wonder может работать с числами произвольной точности, поэтому прогрессия не будет прерываться после определенного количества единиц.
источник
ColdFusion, 277 байт
Это тривиальная модификация моей анкеты ColdFusion, которая добавляет новую строку каждый раз, когда она вызывается .
Протестировано локально на Lucee-Express-5.2.6.60
источник
Пакет Windows,
3836 байтЭтот код создает файл с именем «q», содержащий букву «q», а затем добавляет его в исходный файл. Обратите внимание, что «::» - это псевдоним для «rem», который не требует дополнительного пробела.
Сохранено 2 байта благодаря пользователю 3493001.
источник
Gol> <> , 7 байт
Попробуйте онлайн! Попробуйте онлайн! Попробуйте онлайн!
Это простая вариация обычной Gol> <> квин, но она добавляется при
H
каждом запуске. ПосколькуH
команда останавливает программу, дополнительныеH
в конце не изменяют поведение.источник
T-SQL , 175 байт
Сначала я написал SQL-квиню, а затем изменил ее, добавив дополнительный пробел (несколько вдохновленный этим ответом ).
источник
Befunge-98 (PyFunge) ,
2219 байтПопробуйте онлайн!
Добавляет <перед последним "каждое поколение.
источник
C # (интерактивный компилятор Visual C #) , 89 байт
Вдохновленный ответом Кевина Круйссена.
Попробуйте онлайн!
источник