Программа, которая создает большие версии себя (quine-вариант)


109

Вы должны написать программу, которая будет выводить исходный код, который

  1. Больше, чем оригинальная программа (по характеру)
  2. При запуске напечатает другую программу, размер которой больше ее (т.е. новая программа также является верным ответом на этот вызов)

Это код-гольф, поэтому выигрывает самый короткий ответ.


4
@Kevin, определение рекурсивное. Выходными данными должна быть программа, выход которой больше, чем она сама, и ответ на этот вопрос. Поэтому выход выходного должен быть больше , чем выход, и выход вывода выходного в должен быть еще больше, и так далее
ugoren

8
Я думаю, что вы должны уточнить свои правила. С одной стороны, любой дополнительный вывод кода такой программой «явно бесполезен»; с другой стороны, весь дополнительный код в выводе является «полезным» в том смысле, что он способствует решению этой проблемы.
Джейсон С,

5
Извините за уничтожение вашего вызова. :^)
Джастин

2
Я думаю, что этот конкурс был бы намного лучше как соревнование популярности, чем игра в гольф кода. Это позволило бы намного больше творчества!
corsiKa

30
Естественно, такую ​​программу следует называть хинином.
Джонатан Ван Матре

Ответы:


89

GS2 (8636bd8e) , 0 байт



Это печатает одну новую строку, которая печатает две строки, которая печатает три строки и так далее.

Попробуйте онлайн!


3
Разве это не технически неконкурентоспособно, так как gs2 новее, чем вызов?
DJMcMayhem

24
Этот коммит предшествует вызову на полтора месяца. Я только что проверил, и он работает как задумано.
Деннис

1
Как это не лазейка ???
Mama Fun Roll

14
@MamaFunRoll С чего бы это? Это ничем не отличается от пустой программы Retina, печатающей 1 , пустой программы Jelly, печатающей 0 , или пустой программы Stuck, печатающей Hello, World! ,
Денис

2
@Cyoce Просто так получается, что новая строка выводит другую новую строку в GS2.
Esolanging Fruit

299

H9 + : 1 символ

9

Верно. Один персонаж Выводит текст песни на 99 бутылок пива , что является действительной программой. Все посторонние данные не учитываются, но их там много 9.

Результатом выводимой программы является лирика на 99 бутылок пива 59 раз.

Эта функция дает количество раз, когда текст песни выводится, если вы запускаете время программы n(если мои вычисления верны):

f(n) = 59n-1

32
Программа на 0 символов на заданном языке, учитывая, что она действительна, скорее всего, выведет 0 символов. А поскольку 0 * x = 0 для любого конечного значения x, я могу утверждать, что моя выведенная программа на самом деле в 9999999999999999 раз больше исходного кода.
nitro2k01

39
@JohannesH. Для всех (разрешимых) задач существует язык программирования, который решает задачу в 0 символов.
Cruncher

15
Я все еще двигаюсь тем, что мы называем эту «теорему Кранчера», если она еще не была открыта.
Эрти Сейдохл

22
Одна интересная особенность заключается в том, что он также будет содержать 2*59^n-2экземпляры «Hello, world!» Из-за «h» в «the».
AJMansfield

8
Похоже, тебя избили.
PyRulez

118

GolfScript, 9 символов

{.'.~'}.~

Этот код выводит:

{.'.~'}{.'.~'}.~

какие выводы:

{.'.~'}{.'.~'}{.'.~'}.~

какие выводы:

{.'.~'}{.'.~'}{.'.~'}{.'.~'}.~

и так далее.

Я полагаю, что это самый короткий ответ в «настоящем» языке программирования, полном Тьюринга.

Объяснение:

По сути, оригинальный код выше представляет собой «quine-layer»: он выводит обычный quine, за которым следует сам.

В GolfScript любой литерал блока кода (например {foo}), если его не трогать в стеке, представляет собой квинну. Таким образом, сам по себе, {.'.~'}просто выводит себя, как любой другой кодовый блок.

В .~конце кода берет последний блок кода в стеке, дублирует его и выполняет копию. При выполнении код .'.~'внутри блока кода дублирует самый верхний элемент в стеке (то есть его копию) и добавляет строку .~.

В конце программы интерпретатор GolfScript переводит в строку и выводит все данные в стеке, который, в данном случае, состоит из еще одного {.'.~'}блока, чем на входе, плюс строка .~.

Бонус:

Добавление ]перед первым .(чтобы собрать все блоки кода в стеке в массив до их дублирования) приводит к его экспоненциальному росту:

{].'.~'}.~

выходы:

{].'.~'}{].'.~'}.~

какие выводы:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

какие выводы:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

и так далее.


196
{].'.~'}.~︵ ┻━┻
nitro2k01


2
@ nitro2k01 мои первые мысли точно: D
Сонго

1
Является ли "реальным" в кавычках, потому что HQ9 + не является реальным или потому что GolfScript не реален, или оба?
Роджер Пэйт

1
@thepiercingarrow исходный код похож на это
Род

108

Java 7: 0 символов



Сохранить как файл Blank.java. Если вы сохраните его как любой другой файл, замените любой экземпляр Blankс соответствующим именем файла.

Затем запустите в командной строке сначала компиляцию, а затем запуск. Если компиляция не удалась, остановитесь.

Я перечисляю это как Java 7, потому что это могло бы по-разному выводить для различных версий Java.

Первые несколько выходов (выводятся в stderr):

Error: Could not find or load main class Blank
Blank.java:1: error: class, interface, or enum expected
Error: Could not find or load main class Blank
^
Blank.java:1: error: reached end of file while parsing
Error: Could not find or load main class Blank
                                              ^
2 errors
Blank.java:1: error: class, interface, or enum expected
Blank.java:1: error: class, interface, or enum expected
^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                          ^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                                     ^
Blank.java:1: error: as of release 5, 'enum' is a keyword, and may not be used as an identifier
Blank.java:1: error: class, interface, or enum expected
                                          ^
  (use -source 1.4 or lower to use 'enum' as an identifier)
Blank.java:1: error: = expected
Blank.java:1: error: class, interface, or enum expected
                                               ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:2: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:3: error: = expected
^
^
Blank.java:3: error: ';' expected
^
 ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
     ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
              ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                   ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                 ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
                                        ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                         ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                                              ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:5: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:6: error: = expected
                                              ^
                                              ^
Blank.java:6: error: ';' expected
                                              ^
                                               ^
Blank.java:7: error: reached end of file while parsing
2 errors
        ^
30 errors

23
«Вы должны написать программу, которая будет выводить исходный код, который называется« Вывод, возможно, не является исходным кодом. И, кроме того, в зависимости от определения результата (независимо от того, должен ли он исходить stdout) ничего на самом деле не выводится.
nitro2k01

43
@ nitro2k01 Я цитирую то же самое: «Вы должны написать программу, которая будет выводить исходный код ». Все, что является исходным кодом. Но только некоторые вещи являются допустимым исходным кодом. Кроме того, не было указано, что считать выводом, поэтому мне там разрешают свободу.
Джастин

15
@PyRulez Это верно. Я эксплуатировал ваши правила. Вам не нужно принимать этот ответ. Когда я опубликовал это, я знал, что за этим последует полемика, и многие голосуют «за» и «против». Я решил, что это того стоит.
Джастин

29
Вы уверены, что программа сама распечатала вывод? Разве это не только компилятор? Программа никогда не компилируется и сама по себе не интерпретируется и не выполняется, поэтому она не смогла произвести никакого вывода.
VX

12
@ blabla999 Я не согласен - люди не пробуют эти испытания, потому что кто-то другой делает что-то сумасшедшее. Мы просто бросаем себе вызов сделать это другим способом. Как говорит Марк Розуотер: «Ограничения порождают креативность»
corsiKa

79

HQ9 +, HQ9 ++ и аналогичные, 2 символа

QQ

Это вывод:

QQQQ

36
Я увидел это и подумал: «О, нет, ничто не может победить». Я начал пытаться что-то придумать, а потом меня поразило. Поэтому я разместил ответ.
Джастин

1
@Quincunx Браво, проголосовал за твой ответ.
Виктор Стафуса

4
@Quincunx Нет, я думаю, что это 2^2^nгде начальная программа поколения 0. Длина возвращается m -> m^2.
Вортико

3
@Vortico Хорошая мысль. Хотя я сказал это неправильно, я имел в виду: при длине кода nвывод становится n^n. Однако это неверно; когда длина кода равна n, длина выводаn^2
Джастин

2
Это забавно, потому что даже первые две итерации являются возможными претендентами на этот вопрос.
PyRulez

29

Ruby 27

Очень немного измененная версия этого ( через ):

puts <<3*3,3
puts <<3*3,3
3

Количество раз, когда эта putsстрока печатается, растет в геометрической прогрессии.

$ ruby quine.rb | ruby | ruby
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
3

$ ruby quine.rb | ruby | ruby | ruby | ruby | ruby | ruby | ruby | wc -l
    3283

17
Ответ вдохновлен Kaiser Chiefs
Бен Джексон

25

Лямбда-исчисление - 29

Простой лямбда-термин

(λu.(u u)(u u))(λu.(u u)(u u))

Сокращение этого срока на одну бета-версию

((λu.(u u)(u u))(λu.(u u)(u u)))((λu.(u u)(u u))(λu.(u u)(u u)))

И так далее, и так далее. Это простой вариант классики, (λu.u u)(λu.u u)который представляет собой квин в лямбда-исчислении, здесь двойное самостоятельное применение означает, что мы получаем удвоенный результат.


7
Я бы сказал, что в лямбда-исчислении «запуск» лямбда-термина означает вычисление его нормальной формы, а не выполнение одного бета-сокращения. Кроме того, термин может содержать несколько переопределений, поэтому «сокращение одного переопределения» является неоднозначной операцией.
Петр Пудлак

2
Вы правы, но так как этот термин не имеет нормальной формы, имеет смысл говорить об этом с точки зрения сокращения малого шага. Поскольку в лямбда-исчислении отсутствует какая-либо внутренняя оценка набора, я могу просто определить, как «запускать» его, чтобы уменьшить количество повторных выражений верхнего уровня с повторным выражением с помощью семантики вызова по имени no?
jozefg

3
Ну, термины без нормальной формы соответствуют не завершающим программам. И проблема с переопределением верхнего уровня состоит в том, что у термина может быть два переопределения, причем ни один не является субтермом другого. Вы можете выбрать какой-то критерий, который нужно уменьшить, но я бы сказал, что тогда вы очень далеко ушли от стандартной семантики лямбда-исчисления. (В любом случае, я ценю твою новую идею.)
Петр Пудлак

2
(λx.xxx) (λx.xxx): 20
Фабио Ф.

2
(λx. xx) (λx. xxx) сводится к этому за один шаг
Бен Миллвуд

23

Сценарий SH, 9

cat $0 $0

Растет по экспоненте.

Либо запустить как, sh whatever.shлибо установить его как исполняемый файл.

Версия для Windows здесь .


2
На момент написания этого комментария на странице Quine Wiki говорится, что чтение из файловой системы обманывает.
Лорд Ратт

3
@LordRatte С другой стороны, задача состояла не в том, чтобы написать квинну.
Джейсон С

20

DC 11

Достаточно просто:

6579792
dfP

Первая строка повторяется один раз в каждом поколении:

$ dc growing_quine.dc
6579792
6579792
dfP

$ dc growing_quine.dc | dc | dc 
6579792
6579792
6579792
6579792
dfP

Последняя строка состоит из следующих инструкций: dдублирует последнее значение, помещенное в стек (6579792) (так что мы получаем еще одну копию при каждом его запуске), fпечатает весь стек (который является связкой того же числа) и Pпечатает число (6579792) как поток байтов, который отображается как dfP.


16

красный код (рекурсивное решение)

Это код самого легкого воина, доступного для записи в redcode , известного Imp:

MOV 0, 1

При выполнении код записывает копию своей единственной инструкции по следующему адресу в памяти; затем выполняет его и т. д.


15

Питон 3 - 55

print(open(__file__).read())
f=lambda:print('f()')
f()

Это можно сделать короче, заменив __ file__ именем файла из одного символа и сохранив файл как таковой, но я чувствовал, что этот ответ больше соответствует духу вопроса. После одной итерации выводится:

print(open(__file__).read())
f=lambda:print('f()')
f()
f()

3
Это не Куайн. Смотрите определение .
Петр Пудлак

14
@ PetrPudlák Ни одна из программ в этом вопросе. Это проблема с квин-вариантами, а не строгая квининг.
AJMansfield

6

Smalltalk, 125 61 57

Версия для гольфа выглядит почти нечитаемой, поэтому сначала я объясню (и использую реальные идентификаторы).

Это вариант метода самоизменения «самый странный способ производства переполнения стека».

Метод выводит приветственное сообщение и его текущий источник (только для демонстрации). Затем код модифицируется для вывода более длинной строки и устанавливается. Наконец, новый код вызывается рекурсивно.

Чтобы защитить себя от немедленного побега, он позволяет пользователю подтверждать в каждом цикле.

скомпилировать в объекте:

eatMe_alice
   |msg mySource|

   mySource := thisContext method source.

   '**** Hello Alice' printCR.
   '  ---- my current code is:' printCR.
   mySource printCR.
   '  ---------------' printCR.

   (UserConfirmation confirm:'Again? ') ifTrue:[
       Object compile:
            (mySource
                copyReplaceString:'Hello ','Alice'
                withString:'Hello ','Alice !').
       self eatMe_alice
   ]

начать показ, отправив «eatMe_alice» любому объекту; ноль будет делать:

nil eatMe_alice

Хороший вариант - не вызывать новый код рекурсивно, а вместо этого итеративно, раскручивая стек вызовов и повторно входя в новый метод. Это имеет то преимущество, что не приводит к исключению рекурсии. Для этого замените рекурсивный вызов («self eatMe_alice») на:

thisContext resend

Игра в гольф:

Очевидно, что печать и самозвонки не требовались, поэтому самое короткое (для гольфа) - просто добавить комментарий к моему источнику и вернуть его. Как побочный эффект, он также устанавливается для следующего вызова ...

x|s|Object compile:(s:=thisContext method source,'""').^s

5

Сценарий SH, 12 8 7

Сохраните файл с

sed p *

в своем собственном пустом каталоге и запускайте из этого каталога, используя sh [file]или устанавливая исполняемый файл.


Старая альтернатива с 8 символами , но не требует своего собственного каталога. Сохраните файл с

sed p $0

и запустить с помощью sh [file]или установить исполняемый файл.

Старая альтернатива с 12 символами :

sed -i- p $0

Это на самом деле будет выводить в сам файл программы, но место для вывода не указано. Копирует себя по экспоненте.


1
Возможно, у вас все еще есть шанс использовать ed, но вы не хотите просматривать его справочную страницу ...
Йенс Эрат

4

JavaScript, 41 , 40 символов

function f(){console.log(f+"f(f())")}f()

При первом запуске он выводит себя с другим ;f()в конце. Последующие прогоны вывода приводят к тому, что каждый «входной» источник печатается дважды.

alertбудет короче, console.logно я не считаю, что несколько диалоговых окон предупреждений являются «выходными данными», хотя кажется разумным вызывать несколько строк в консоли в качестве выходных данных.


Вы можете сохранить один байт "f(f())"вместо"f();f()"
Хеди

Это, кажется, не работает для меня ...
Разрушаемый Лимон

4

J , 1 байт

'

Попробуйте онлайн!

Открытая цитата дает, очевидно, ошибку открытой цитаты:

|open quote
|   '
|   ^
|[-1] /home/runner/.code.tio

Обратите внимание, что по природе интерпретатора J ошибки выводятся в STDOUT , а не в STDERR.

Когда вышеприведенный код запускается как код, он печатает:

|open quote
|   |   '
|       ^
|[-2] /home/runner/.code.tio

затем

|open quote
|   |   |   '
|           ^
|[-2] /home/runner/.code.tio

и так далее. Каждый раз, когда код выполняется, вторая строка заполняется слева четырьмя байтами |   , выполняя требование этой задачи.

J , правильный вариант Quine, 25 байтов

echo,~'echo,:~(,quote)'''

Попробуйте онлайн!

Выходы

echo,:~(,quote)'echo,:~(,quote)'

И затем он выводит себя дважды, в отдельных строках:

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

тогда

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

и так далее.

Первый вывод - это простой вариант стандарта J quine . Добавленное ,:~объединяет себя вертикально, где результирующий 2D-массив печатается в виде двух строк одной и той же строки.



3

сетчатый, 11 байтов, неконкурентный

"'34'coo1o;

Это стандартная структура quine, за исключением того, что 1после каждой итерации печатается дополнительная . Попробуйте онлайн!

Первые несколько выходов:

"'34'coo1o;
"'34'coo1o;1
"'34'coo1o;11
"'34'coo1o;111

3

Microscript II, 6 байт

Неконкурентоспособный язык затрудняет задачу.

"qp"qp

Первая итерация добавляет дополнительное qpв конец, и каждая последующая итерация добавляет дополнительную копию этой оригинальной программы в начало.


3

Рунические чары , 6 байт

"'<S@>

Попробуйте онлайн!

Это было странно. Все, что мне нужно было сделать, это удалить ~из оригинальной лебеды, найденной Джо Кингом .

Каждый дополнительный прогон добавляет другой <в конец, например:

"'<S@><<<<<<<<<

Все из которых ничего не делают.


2

EcmaScript 6 (51 байт):

(_=x=>'(_='+_+Array(x++).join(','+_)+')('+x+')')(2)

Он производит более длинную версию самого себя, которая может производить более длинную версию самого себя, которая может производить более длинную версию самого себя и т. Д ...


2

PHP, 38

<?echo fgets(fopen(__FILE__,'r')).';';

Это добавит точку с запятой при каждом запуске.


Являются ли точки с запятой бесполезным кодом?
Джастин

3
@Quincunx Они правы. Тем не менее, что вы считаете полезным кодом?
ComFreek

Может быть, вы могли бы вставить в ';'. Тогда вы получите более длинные результаты.
Джастин

1
почему нет <?=fgets(fopen(__FILE__,'r')).';';?
Исмаэль Мигель

1
;<?echo fgets(fopen(__FILE__,'r'));
jimmy23013

2

ECMAScript 6 (38 знаков)

(f=_=>'(f='+f+')();(f='+f+')();')();

Какие выводы:

(f=_=>'(f='+f+')();(f='+f+')();')();(f=_=>'(f='+f+')();(f='+f+')();')();

редактировать

Вы можете сделать (28 символов):

(f=_=>'(f='+f+')();'+f())();

Однако он будет повторяться бесконечно и никогда ничего не вернет ... но это можно решить, выполнив что-то вроде этого (42 символа):

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);

Который будет выводить:

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(2);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(1);

3
+_+ =_=+1 за смайлики
TuxCrafting

2

Common Lisp, 16 символов

(print `(or ,-))

Конечно, он только интерактивный, но возможность ссылаться на текущую форму верхнего уровня, вероятно, является единственным лучшим способом минимизировать нетривиальную программу, которая соответствует спецификации.

Что было бы действительно интересно, так это то, что взрывается быстрее всех. Может быть что-то вроде

(print `(progn ,@(loop repeat (length -) collect -)))


+1 За Обычный Лисп. Похоже, вы можете пропустить `и ,?
Даниеро

@daniero Без кавычек, он просто печатает оригинальную программу, никогда не растя. В этот момент вы можете также пропустить or:(print -)
Стюарт Олсен

2

Юлия, 66 символов

x="print(\"x=\$(repr(x))\\n\$x;\"^2)";print("x=$(repr(x))\n$x;"^2)

Выход (134 символа):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Результат выполнения результата (268 символов):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

следующий результат (536 символов):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Следующий результат (1072 символа):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Я надеюсь, что это в соответствии с правилами.

Он производит больший вывод, а сам вывод является допустимым исходным кодом, который снова производит больший вывод.


Будет ли вывод, при запуске, производить правильную запись?
PyRulez

В первом примере вывод является действительным кодом. Это строковый литерал, содержащий 5 периодов. Во втором примере ввод самой подсказки julia ничего не сделает. Я просто подумал, что просто давая repl символ новой строки, нажав Enter, вы получите более длинный вывод, чем ввод.
ML

Будет ли "....." производить большую версию себя?
PyRulez

Ах, теперь я понимаю. Я только заметил, что это должно быть рекурсивно ... время, чтобы исправить мое решение. Спасибо за подсказку.
ML

1
Я думаю, что код соответствует правилам сейчас.
ML

2

05AB1E, 15 байтов, неконкурентный

0"DÐ34çý"DÐ34çý

Попробуйте онлайн!

Отпечатки 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могут быть заменены на Ð.
Emigna

1
Почему неконкурентоспособен?
MD XF

2

Evoloop, 9 × 9 прямоугольник (81 ячейка)

Клеточный автомат Evoloop в комплекте с Golly поддерживает шаблоны , которые копируют себя в «Куин-как» путь. В частности, каждый из этих шаблонов содержит «программу»; шаблон воспроизводит себя, сначала выполняя программу (которая создает «тело» дочери), а затем копируя программу в дочку.

Вышесказанное относится к более известному клеточному автомату "Langton's Loops", а также к Evoloop, но у Evoloop есть интересное отличие, заключающееся в том, что легко создать шаблон, который растет в каждом последующем поколении.

(Гораздо более интересным, на мой взгляд, является тот факт , что Evoloop простой клеточный автомат , который содержит модели , которые воспроизводят себя и развиваться в очень жизненной манере! Я думаю , что единственный известный клеточные автоматы , которые делают это, Evoloop и его потомки Недостатком Evoloop, однако, является то, что существует один конкретный «лучший» геном; эволюция всегда в конечном итоге сходится к этому одному геному.)

Теперь у этого представления есть два недостатка. Во-первых, неясно, каков «выход» клеточного автомата. Но я думаю, что самовоспроизводящийся автомат "достаточно близок" к тому, чтобы быть квинем; это конечно не менее интересно! Другим недостатком является то, что эти шаблоны не просто создают одну копию себя; каждая копия исходного шаблона пытается создать бесконечно много своих копий, и эти копии в конечном итоге разрушительно взаимодействуют друг с другом. Итак, я думаю, что я выполнил требования этой задачи по духу, но не по букве.

Без дальнейших церемоний, картина такова:

022222220
270170172
212222202
202000212
272000272
212000202
202222212
271041032
022222250

Вот снова образец в формате, который можно скопировать и вставить в Golly:

x = 9, y = 9, rule = Evoloop
.7B$BG.AG.AGB$BA5B.B$B.B3.BAB$BGB3.BGB$BAB3.B.B$B.5BAB$BGA.DA.CB$.6BE
!

Хорошо, но как это выглядит? Это выглядит так:

Шаблон в клеточном автомате, который создает все большие копии себя.

В приведенной выше анимации вы можете видеть, как первоначальный шаблон создает большую дочь, которая создает большую внучку, затем большую правнучку и, наконец, еще большую пра-пра-внучку, которая начинает строить еще большую треть-пра-внучку. внучка. Если бы вы использовали этот паттерн в течение долгого времени, он продолжал бы продолжаться так же вечно (или, возможно, они в конечном итоге будут настигнуты развитыми организмами, которые способны размножаться гораздо быстрее; я не уверен).


1

Дозатор, 26

Поместите этот код в любой файл .bat, и он продолжит выполнение (в бесконечном цикле), и файл также будет расти.

echo echo %0 ^>^> %0 >> %0

Это не совсем работает, %0это команда, используемая для вызова скрипта, который может не иметь .BATрасширения. Вы можете использовать, %~nx0чтобы получить полное имя файла командного файла.
Джейсон C

@JasonC AFAIK, его не нужно .batвыполнять. Если имя файла execute.bat, вы можете ввести либо executeили execute.bat. Оба будут работать.
ub3rst4r

Сам файл должен иметь .batрасширение для выполнения , но вы можете оставить расширение, когда вы запустите его (при вводе команды без расширения, Windows пытается .com, .exe, то .batв таком порядке). Если имя файла есть hello.bat, то >> %0напишет файл с именем hello, который не является оригиналом hello.bat(и не может быть выполнен).
Джейсон C

1

PYG (6)

P(Q,Q)

Печатает собственный исходный код, разделенный символом новой строки. Второе поколение будет

P(Q,Q)
P(Q,Q)

и так далее.


1

НЕФТЬ , 83 байта

0
0
1
1
1
4
1
11
4
1
11
1
2
2
1
12
18
10
18
1
32
22
1
18
26
4
26
8
18
11
6
17
4
26

Сначала он печатает две строки с нулем в них, а затем сравнивает каждую строку со строкой 1, если они равны (что имеет место при исчерпании файла), мы печатаем то, что находится в ячейке 26. Результирующий вывод будет выглядеть как то же самое, за исключением добавления 33, которое ничего не делает. В следующий раз будет добавлена ​​еще одна строка и так далее.


1

Помогите, WarDoq! 1 байт.

ЧАС

Печать Hello, World!.

Другие символы, кроме H, являются действительным (и безопасным) исходным кодом (который печатает другие варианты Hello World).


Также работает в (вариантах) HQ9 +.
CalculatorFeline

@CalculatorFeline в HQ9 + это не будет продолжать расти.
Мартин Эндер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.