Програма, яка створює більші версії себе (quine-variant)


109

Ви повинні написати програму, яка виведе, який є вихідний код

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

Це код-гольф, тому найкоротша відповідь виграє.


4
@Kevin, Визначення є рекурсивним. Вихід повинен бути програмою, вихід якої більший за себе, і відповідь на це питання. Отже, вихід має бути більшим, ніж вихід, а вихідний вихід повинен бути ще більшим тощо.
ugoren

8
Я думаю, ви повинні уточнити свої правила. З одного боку, будь-який додатковий вихідний код такою програмою є "очевидно марним"; з іншого боку, весь додатковий код у висновку є "корисним" тим, що він сприяє досягненню мети відповіді на це завдання.
Джейсон C

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 char

9

Це вірно. Один персонаж. Видає тексти пісень до 99 пляшок пива , що є дійсною програмою. Усі сторонні дані не враховуються, але їх багато 9.

Вихід програми, що виходить, - це тексти пісень до 99 пляшок пива 59 разів.

Ця функція дає кількість виведених текстів пісень, якщо ви запускаєте програмні nрази (якщо мій розрахунок правильний):

f(n) = 59n-1

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

39
@JohannesH. Для всіх (вирішуваних) проблем існує мова програмування, яка вирішує проблему в 0 знаків.
Cruncher

15
Я все ще рухаюся, що ми називаємо цю "теорему Кренчера", якщо вона вже не була виявлена.
Erty Seidohl

22
Цікавою особливістю є те, що він також міститиме 2*59^n-2екземпляри "Привіт, світ!" Через "h" у "the".
AJMansfield

8
Схоже, тебе побили.
PyRulez

118

GolfScript, 9 символів

{.'.~'}.~

Цей код виводить:

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

який виводить:

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

який виводить:

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

і так далі.

Я вважаю, що це найкоротша відповідь "справжньою" мовою програмування Тьюрінга.

Пояснення:

В основному, вихідний код вище "quine-шар": він виводить звичайну quine, за якою слідує сама.

У GolfScript будь-який код коду, буквальний (наприклад {foo}), якщо він не порушується на стеку, є лайкою. Таким чином, сам по собі {.'.~'}просто виводить себе, як і будь-який інший блок коду.

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

Наприкінці програми інтерпретатор GolfScript впорядковує і виводить все на стек, що в цьому випадку складається з ще одного {.'.~'}блоку, ніж у вхідному рядку, плюс рядка .~.

Бонус:

Додавання ]до першого .(щоб зібрати всі блоки коду з стека в масив до їх дублювання) змушує його рости експоненціально:

{].'.~'}.~

Виходи:

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

який виводить:

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

який виводить:

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

і так далі.


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


2
@ nitro2k01 саме мої перші думки: D
Сонго

1
Чи "справжнє" в лапках, тому що HQ9 + не є реальним або тому, що GolfScript не є реальним, або те й інше?
Роджер Пате

1
@thepiercingarrow вихідний код схожий на це
Rod

108

Ява 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 Bravo, підтримав вашу відповідь.
Віктор Стафуса

4
@Quincunx Ні, я вважаю, що це 2^2^nпочаткова програма, покоління 0. Довжина повторюється m -> m^2.
Vortico

3
@Vortico Хороший момент. Незважаючи на те, що я сказав це неправильно, я мав на увазі: При довжині коду nвихід стає n^n. Однак це помилково; коли довжина коду - тривалість nвиходуn^2
Джастін,

2
Це смішно, бо навіть перші два повторення є претендентами на це питання.
PyRulez

29

Рубін 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
Відповідь, натхненна начальниками кайзерів
Бен Джексон

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
Ви маєте рацію, але оскільки цей термін не має нормальної форми, є сенс говорити про це з точки зору зменшення невеликих кроків. Оскільки в обчисленні лямбда не вистачає будь-якої притаманної оцінки набору, я можу просто визначити "запуск", щоб зменшити одиночний редекс верхнього рівня редексу з семантикою виклику за іменем, ні?
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 З іншого боку, завданням було не писати королеви.
Джейсон C

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

червоний код (рекурсивне рішення)

Це код найпростішого воїна, записаного в червоному коді , знаменитого 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

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

Це варіант самодозмінюваного методу "найсмішніший спосіб виготовлення продукту" a-stack-overflow ".

Метод виводить привіт повідомлення та його поточне джерело (лише для демонстрації). Потім код модифікується, щоб вивести довший рядок і встановлений. Нарешті, новий код називається рекурсивно.

Щоб захистити себе від негайного втечі, він дозволяє користувачеві підтверджувати в кожному циклі.

компілювати в Object:

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, не хотіли б переглядати сторінку чоловіка ...
Jens Erat

4

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

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

Перший раз, коли ви запускаєте його, він виводить себе разом із іншим ;f()наприкінці. Подальші запуски вихідних результатів у кожному "вхідному" джерелі, надрукованому двічі.

alertбуло б коротше, console.logале я не вважаю кілька діалогів оповіщення виведенням "", тоді як здається розумним називати кілька рядків у консолі як вихід.


Ви можете зберегти один байт "f(f())"замість"f();f()"
Hedi

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

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

Windows .BAT, 25

@COPY %~nx0+%~nx0 CON>NUL

Зростає експоненціальною швидкістю.

Еквівалент SH версія тут .


3

ретикулярна, 11 байт, неконкурентна

"'34'coo1o;

Це стандартна рамка quine, за винятком того 1, що після кожної ітерації надрукується додаткова. Спробуйте в Інтернеті!

Перші кілька результатів:

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

3

Мікроскрипт II, 6 байт

Мова, що не конкурує, мовою віддає виклик.

"qp"qp

Перша ітерація додає додаткові дані qpдо кінця, а кожна наступна ітерація додає на початку додаткову копію цієї оригінальної програми.



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

Лист звичайний, 16 персонажів

(print `(or ,-))

Зрозуміло, це лише інтерактивна робота, але можливість посилання на поточну форму верхнього рівня - це, мабуть, єдиний найкращий спосіб мінімізувати нетривіальну програму, що відповідає специфікації.

Що було б по-справжньому цікаво - те, що підірветься найшвидше. Можливо, щось на кшталт

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


+1 Для звичайного Lisp. Мені здається, ви можете пропустити `і ,?
daniero

@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 нічого не призведе. Я просто подумав, що надання символу відбиття фактично символом нового рядка, натисканням клавіші 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можна замінити на Ð.
Емінья

1
Чому неконкуренто?
MD XF

2

Evoloop, прямокутник 9 × 9 (81 комірка)

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

Сказане стосується більш відомих стільникових автоматів "Петлі Ленґтона", а також 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, який нічого не робить. Наступного разу буде доданий ще один рядок тощо.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.