Вы должны написать программу, которая будет выводить исходный код, который
- Больше, чем оригинальная программа (по характеру)
- При запуске напечатает другую программу, размер которой больше ее (т.е. новая программа также является верным ответом на этот вызов)
Это код-гольф, поэтому выигрывает самый короткий ответ.
code-golf
quine
code-generation
PyRulez
источник
источник
:^)
Ответы:
GS2 (8636bd8e) , 0 байт
Это печатает одну новую строку, которая печатает две строки, которая печатает три строки и так далее.
Попробуйте онлайн!
источник
H9 + : 1 символ
Верно. Один персонаж Выводит текст песни на 99 бутылок пива , что является действительной программой. Все посторонние данные не учитываются, но их там много
9
.Результатом выводимой программы является лирика на 99 бутылок пива 59 раз.
Эта функция дает количество раз, когда текст песни выводится, если вы запускаете время программы
n
(если мои вычисления верны):источник
2*59^n-2
экземпляры «Hello, world!» Из-за «h» в «the».GolfScript, 9 символов
Этот код выводит:
какие выводы:
какие выводы:
и так далее.
Я полагаю, что это самый короткий ответ в «настоящем» языке программирования, полном Тьюринга.
Объяснение:
По сути, оригинальный код выше представляет собой «quine-layer»: он выводит обычный quine, за которым следует сам.
В GolfScript любой литерал блока кода (например
{foo}
), если его не трогать в стеке, представляет собой квинну. Таким образом, сам по себе,{.'.~'}
просто выводит себя, как любой другой кодовый блок.В
.~
конце кода берет последний блок кода в стеке, дублирует его и выполняет копию. При выполнении код.'.~'
внутри блока кода дублирует самый верхний элемент в стеке (то есть его копию) и добавляет строку.~
.В конце программы интерпретатор GolfScript переводит в строку и выводит все данные в стеке, который, в данном случае, состоит из еще одного
{.'.~'}
блока, чем на входе, плюс строка.~
.Бонус:
Добавление
]
перед первым.
(чтобы собрать все блоки кода в стеке в массив до их дублирования) приводит к его экспоненциальному росту:выходы:
какие выводы:
какие выводы:
и так далее.
источник
{].'.~'}.~︵ ┻━┻
Java 7: 0 символов
Сохранить как файл
Blank.java
. Если вы сохраните его как любой другой файл, замените любой экземплярBlank
с соответствующим именем файла.Затем запустите в командной строке сначала компиляцию, а затем запуск. Если компиляция не удалась, остановитесь.
Я перечисляю это как Java 7, потому что это могло бы по-разному выводить для различных версий Java.
Первые несколько выходов (выводятся в stderr):
источник
stdout
) ничего на самом деле не выводится.HQ9 +, HQ9 ++ и аналогичные, 2 символа
Это вывод:
источник
2^2^n
где начальная программа поколения 0. Длина возвращаетсяm -> m^2
.n
вывод становитсяn^n
. Однако это неверно; когда длина кода равнаn
, длина выводаn^2
Ruby 27
Очень немного измененная версия этого ( через ):
Количество раз, когда эта
puts
строка печатается, растет в геометрической прогрессии.источник
Лямбда-исчисление - 29
Простой лямбда-термин
Сокращение этого срока на одну бета-версию
И так далее, и так далее. Это простой вариант классики,
(λu.u u)(λu.u u)
который представляет собой квин в лямбда-исчислении, здесь двойное самостоятельное применение означает, что мы получаем удвоенный результат.источник
Сценарий SH, 9
Растет по экспоненте.
Либо запустить как,
sh whatever.sh
либо установить его как исполняемый файл.Версия для Windows здесь .
источник
DC 11
Достаточно просто:
Первая строка повторяется один раз в каждом поколении:
Последняя строка состоит из следующих инструкций:
d
дублирует последнее значение, помещенное в стек (6579792) (так что мы получаем еще одну копию при каждом его запуске),f
печатает весь стек (который является связкой того же числа) иP
печатает число (6579792) как поток байтов, который отображается какdfP
.источник
красный код (рекурсивное решение)
Это код самого легкого воина, доступного для записи в redcode , известного Imp:
При выполнении код записывает копию своей единственной инструкции по следующему адресу в памяти; затем выполняет его и т. д.
источник
Питон 3 - 55
Это можно сделать короче, заменив __ file__ именем файла из одного символа и сохранив файл как таковой, но я чувствовал, что этот ответ больше соответствует духу вопроса. После одной итерации выводится:
источник
Smalltalk,
125 6157Версия для гольфа выглядит почти нечитаемой, поэтому сначала я объясню (и использую реальные идентификаторы).
Это вариант метода самоизменения «самый странный способ производства переполнения стека».
Метод выводит приветственное сообщение и его текущий источник (только для демонстрации). Затем код модифицируется для вывода более длинной строки и устанавливается. Наконец, новый код вызывается рекурсивно.
Чтобы защитить себя от немедленного побега, он позволяет пользователю подтверждать в каждом цикле.
скомпилировать в объекте:
начать показ, отправив «eatMe_alice» любому объекту; ноль будет делать:
nil eatMe_alice
Хороший вариант - не вызывать новый код рекурсивно, а вместо этого итеративно, раскручивая стек вызовов и повторно входя в новый метод. Это имеет то преимущество, что не приводит к исключению рекурсии. Для этого замените рекурсивный вызов («self eatMe_alice») на:
Игра в гольф:
Очевидно, что печать и самозвонки не требовались, поэтому самое короткое (для гольфа) - просто добавить комментарий к моему источнику и вернуть его. Как побочный эффект, он также устанавливается для следующего вызова ...
источник
Сценарий SH,
1287Сохраните файл с
в своем собственном пустом каталоге и запускайте из этого каталога, используя
sh [file]
или устанавливая исполняемый файл.Старая альтернатива с 8 символами , но не требует своего собственного каталога. Сохраните файл с
и запустить с помощью
sh [file]
или установить исполняемый файл.Старая альтернатива с 12 символами :
Это на самом деле будет выводить в сам файл программы, но место для вывода не указано. Копирует себя по экспоненте.
источник
ed
, но вы не хотите просматривать его справочную страницу ...JavaScript,
41, 40 символовПри первом запуске он выводит себя с другим
;f()
в конце. Последующие прогоны вывода приводят к тому, что каждый «входной» источник печатается дважды.alert
будет короче,console.log
но я не считаю, что несколько диалоговых окон предупреждений являются «выходными данными», хотя кажется разумным вызывать несколько строк в консоли в качестве выходных данных.источник
"f(f())"
вместо"f();f()"
J , 1 байт
Попробуйте онлайн!
Открытая цитата дает, очевидно, ошибку открытой цитаты:
Обратите внимание, что по природе интерпретатора J ошибки выводятся в STDOUT , а не в STDERR.
Когда вышеприведенный код запускается как код, он печатает:
затем
и так далее. Каждый раз, когда код выполняется, вторая строка заполняется слева четырьмя байтами
|
, выполняя требование этой задачи.J , правильный вариант Quine, 25 байтов
Попробуйте онлайн!
Выходы
И затем он выводит себя дважды, в отдельных строках:
тогда
и так далее.
Первый вывод - это простой вариант стандарта J quine . Добавленное
,:~
объединяет себя вертикально, где результирующий 2D-массив печатается в виде двух строк одной и той же строки.источник
Windows .BAT, 25
Растет по экспоненте.
Эквивалентная версия SH здесь .
источник
сетчатый, 11 байтов, неконкурентный
Это стандартная структура quine, за исключением того, что
1
после каждой итерации печатается дополнительная . Попробуйте онлайн!Первые несколько выходов:
источник
Microscript II, 6 байт
Неконкурентоспособный язык затрудняет задачу.
Первая итерация добавляет дополнительное
qp
в конец, и каждая последующая итерация добавляет дополнительную копию этой оригинальной программы в начало.источник
Рунические чары , 6 байт
Попробуйте онлайн!
Это было странно. Все, что мне нужно было сделать, это удалить
~
из оригинальной лебеды, найденной Джо Кингом .Каждый дополнительный прогон добавляет другой
<
в конец, например:Все из которых ничего не делают.
источник
EcmaScript 6 (51 байт):
Он производит более длинную версию самого себя, которая может производить более длинную версию самого себя, которая может производить более длинную версию самого себя и т. Д ...
источник
PHP, 38
Это добавит точку с запятой при каждом запуске.
источник
';'
. Тогда вы получите более длинные результаты.<?=fgets(fopen(__FILE__,'r')).';';
?;<?echo fgets(fopen(__FILE__,'r'));
ECMAScript 6 (38 знаков)
Какие выводы:
редактировать
Вы можете сделать (28 символов):
Однако он будет повторяться бесконечно и никогда ничего не вернет ... но это можно решить, выполнив что-то вроде этого (42 символа):
Который будет выводить:
источник
+_+ =_=
+1 за смайликиCommon Lisp, 16 символов
(print `(or ,-))
Конечно, он только интерактивный, но возможность ссылаться на текущую форму верхнего уровня, вероятно, является единственным лучшим способом минимизировать нетривиальную программу, которая соответствует спецификации.
Что было бы действительно интересно, так это то, что взрывается быстрее всех. Может быть что-то вроде
(print `(progn ,@(loop repeat (length -) collect -)))
источник
`
и,
?or
:(print -)
Юлия, 66 символов
Выход (134 символа):
Результат выполнения результата (268 символов):
следующий результат (536 символов):
Следующий результат (1072 символа):
Я надеюсь, что это в соответствии с правилами.
Он производит больший вывод, а сам вывод является допустимым исходным кодом, который снова производит больший вывод.
источник
05AB1E, 15 байтов, неконкурентный
Попробуйте онлайн!
Отпечатки
0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý
,которые печатает
0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý
ит. Д.
источник
DD
могут быть заменены наÐ
.Evoloop, 9 × 9 прямоугольник (81 ячейка)
Клеточный автомат Evoloop в комплекте с Golly поддерживает шаблоны , которые копируют себя в «Куин-как» путь. В частности, каждый из этих шаблонов содержит «программу»; шаблон воспроизводит себя, сначала выполняя программу (которая создает «тело» дочери), а затем копируя программу в дочку.
Вышесказанное относится к более известному клеточному автомату "Langton's Loops", а также к Evoloop, но у Evoloop есть интересное отличие, заключающееся в том, что легко создать шаблон, который растет в каждом последующем поколении.
(Гораздо более интересным, на мой взгляд, является тот факт , что Evoloop простой клеточный автомат , который содержит модели , которые воспроизводят себя и развиваться в очень жизненной манере! Я думаю , что единственный известный клеточные автоматы , которые делают это, Evoloop и его потомки Недостатком Evoloop, однако, является то, что существует один конкретный «лучший» геном; эволюция всегда в конечном итоге сходится к этому одному геному.)
Теперь у этого представления есть два недостатка. Во-первых, неясно, каков «выход» клеточного автомата. Но я думаю, что самовоспроизводящийся автомат "достаточно близок" к тому, чтобы быть квинем; это конечно не менее интересно! Другим недостатком является то, что эти шаблоны не просто создают одну копию себя; каждая копия исходного шаблона пытается создать бесконечно много своих копий, и эти копии в конечном итоге разрушительно взаимодействуют друг с другом. Итак, я думаю, что я выполнил требования этой задачи по духу, но не по букве.
Без дальнейших церемоний, картина такова:
Вот снова образец в формате, который можно скопировать и вставить в Golly:
Хорошо, но как это выглядит? Это выглядит так:
В приведенной выше анимации вы можете видеть, как первоначальный шаблон создает большую дочь, которая создает большую внучку, затем большую правнучку и, наконец, еще большую пра-пра-внучку, которая начинает строить еще большую треть-пра-внучку. внучка. Если бы вы использовали этот паттерн в течение долгого времени, он продолжал бы продолжаться так же вечно (или, возможно, они в конечном итоге будут настигнуты развитыми организмами, которые способны размножаться гораздо быстрее; я не уверен).
источник
Дозатор, 26
Поместите этот код в любой файл .bat, и он продолжит выполнение (в бесконечном цикле), и файл также будет расти.
источник
%0
это команда, используемая для вызова скрипта, который может не иметь.BAT
расширения. Вы можете использовать,%~nx0
чтобы получить полное имя файла командного файла..bat
выполнять. Если имя файлаexecute.bat
, вы можете ввести либоexecute
илиexecute.bat
. Оба будут работать..bat
расширение для выполнения , но вы можете оставить расширение, когда вы запустите его (при вводе команды без расширения, Windows пытается.com
,.exe
, то.bat
в таком порядке). Если имя файла естьhello.bat
, то>> %0
напишет файл с именемhello
, который не является оригиналомhello.bat
(и не может быть выполнен).PYG (6)
Печатает собственный исходный код, разделенный символом новой строки. Второе поколение будет
и так далее.
источник
НЕФТЬ , 83 байта
Сначала он печатает две строки с нулем в них, а затем сравнивает каждую строку со строкой 1, если они равны (что имеет место при исчерпании файла), мы печатаем то, что находится в ячейке 26. Результирующий вывод будет выглядеть как то же самое, за исключением добавления
33
, которое ничего не делает. В следующий раз будет добавлена еще одна строка и так далее.источник
Помогите, WarDoq! 1 байт.
Печать
Hello, World!
.Другие символы, кроме H, являются действительным (и безопасным) исходным кодом (который печатает другие варианты Hello World).
источник