それ自体のより大きなバージョンを作成するプログラム(類似バリアント)


109

次のソースコードを出力するプログラムを作成します。

  1. 元のプログラムよりも大きい(文字単位)
  2. 実行時にそれ自体よりも大きい別のプログラムを印刷します(つまり、新しいプログラムもこの課題に対する有効な回答です)

これはコードゴルフなので、最短の回答が勝ちです。


4
@Kevin、定義は再帰的です。出力は、出力がそれ自体よりも大きいプログラムであり、この質問に対する回答である必要があります。そのため、出力の出力は出力より大きく、出力の出力はさらに大きくする必要があります。
ugoren 14

8
ルールを明確にする必要があると思います。一方では、そのようなプログラムによって出力される追加コードは「明らかに役に立たない」。一方、出力のすべての追加コードは、このチャレンジに答えるという目標を促進するという点で「有用」です。
ジェイソンC 14

5
チャレンジを破壊してすみません。:^)
ジャスティン14

2
このチャレンジは、コードゴルフよりも人気コンテストとしてはるかに優れていると思います。それは、はるかに多くの創造性を可能にします!
corsiKa 14

30
当然、そのようなプログラムはキニーネとして知られるべきです。
ジョナサンヴァンマトレ14

回答:


89

GS2(8636bd8e)、0バイト



これにより、単一の改行が印刷され、2つの改行が印刷され、3つの改行が印刷されます。

オンラインでお試しください!


3
gs2はチャレンジよりも新しいので、これは技術的に競合していませんか?
DJMcMayhem

24
このコミットは、チャレンジより1か月半前に行われます。私はそれをテストしましたが、意図したとおりに機能します。
デニス

1
これは抜け穴ではありませんか???
ママファンロール

14
@MamaFunRollなぜだろうか?これは、空のRetinaプログラム印刷1、空のJellyプログラム印刷0、または空のStuckプログラム印刷Hello、World!と違いはありません
デニス

2
@Cyoce GS2では、改行が別の改行を出力することがあります。
Esolangingフルーツ

299

H9 +:1文字

9

そのとおり。一文字。歌詞を出力ビールの99本のボトル有効なプログラムです。無関係なデータはすべてカウントされませんが、そこにはたくさん9のがあります。

出力されたプログラムの出力は、99本のビールへの歌詞が59回です。

この関数は、プログラムn時間を実行した場合に歌詞が出力される回数を示します(私の計算が正しい場合):

f(n) = 59n-1

32
与えられた言語の0文字プログラムは、それが有効であることを考えると、おそらく0文字を出力します。そして、任意の有限値xに対して0 * x = 0であるため、出力されたプログラムは実際にはソースコードの9999999999999999倍大きいと主張できます。
nitro2k01 14

39
ヨッシー すべての(解決可能な)問題については、0文字で問題を解決するプログラミング言語が存在します。
ランチャー14

15
まだ発見されていない限り、「クランチャーの定理」と名付けていることに変わりはありません。
アーティセイドール14

22
興味深い機能の1つは2*59^n-2、「the」の「h」により「Hello、world!」のインスタンスも含まれることです。
-AJMansfield

8
あなたは負けたようです。
-PyRulez

118

GolfScript、9文字

{.'.~'}.~

このコードの出力:

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

どの出力:

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

どの出力:

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

等々。

これは、これまでのところ「本物の」チューリング完全プログラミング言語における最短の答えだと思います。

説明:

基本的に、上記の元のコードは「クインレイヤー」です。通常のクインに続いてそれ自体が出力されます。

GolfScriptでは、コードブロックリテラル(例{foo}:)は、スタック上で邪魔されずに残っている場合、クインです。したがって、{.'.~'}他のコードブロックと同じように、それ自体で出力するだけです。

.~コードの最後には、スタック上の最後のコードブロックを取り、それを複製し、コピーを実行します。実行されると、コード.'.~'ブロック内のコードは、スタックの一番上の項目(つまり、それ自体のコピー)を複製し、stringを追加します.~

プログラムの最後で、GolfScriptインタープリターはスタック上のすべてを文字列化し、出力します。この場合、{.'.~'}入力よりも1つ多くのブロックとstring で構成されます.~

ボーナス:

]最初の前に.(を複製する前にスタック上のすべてのコードブロックを配列に収集するために)を追加すると、指数関数的に成長します。

{].'.~'}.~

出力:

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

どの出力:

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

どの出力:

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

等々。


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


2
まさに@ nitro2k01私の最初の考え:D
ソンゴ

1
HQ9 +が本物ではない、またはGolfScriptが本物ではない、またはその両方であるため、引用符で「本物」ですか?
ロジャーパテ

1
似ているソースコードを@thepiercingarrow これを
ロッド

108

Java 7:0文字



ファイルとして保存しますBlank.java。他のファイルとして保存する場合はBlank、のインスタンスを適切なファイル名に置き換えます。

次に、最初にコンパイルしてからコマンドラインで実行し、次に実行します。コンパイルが失敗した場合、停止します。

Javaのバージョンによって出力が異なる場合があるため、これをJava 7としてリストします。

最初のいくつかの出力(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 14

43
@ nitro2k01私は同じことを引用します:「あなたはソースコードを出力するプログラムを書くべきです」。何でもソースコードです。ただし、有効なソースコードは一部のみです。さらに、出力と見なされるものが指定されていなかったため、そこに自由が与えられています。
ジャスティン14

15
@PyRulezそうです。私はあなたのルールを利用しました。この答えを受け入れる必要はありません。これを投稿したとき、多くの賛成票と反対票で完了する論争が続くことを知っていました。しかし、それだけの価値があると判断しました。
ジャスティン14

29
プログラム自体が出力を印刷しましたか?それはコンパイラだけではなかったのですか?プログラムはコンパイルされず、それ自体は解釈も実行もされないため、出力を生成できませんでした。
VX 14

12
@ blabla999私は同意しません-他の誰かがおかしなことをするので、人々はこれらの挑戦を試みません。私たちは他の方法でそれをするように自分自身に挑戦しています。マーク・ローズウォーターが言うように、「制限事項は、創造性を繁殖」
corsiKa

79

HQ9 +、HQ9 ++など、2文字

QQ

これは出力です:

QQQQ

36
私はこれを見て、「ああ、何もこれに勝るものはない」と思った。私は何かを考え出そうとし始め、それが私を襲った。そこで答えを投稿しました。
ジャスティン14

1
@Quincunx Bravo、あなたの答えを支持しました。
ビクターStafusa 14

4
@Quincunxいいえ、そうだと思います2^2^n、最初のプログラムは世代0ですm -> m^2。長さは再帰します。
ボルティコ14

3
@Vortico良い点。間違っていると言っても、私は次のことを意味しました:code-length nでは、出力はになりn^nます。ただし、それは誤りです。コード長がのn場合、出力の長さはn^2
ジャスティン14

2
しかし、最初の2回の繰り返しでさえこの質問の候補になる可能性があるため、面白いです。
PyRulez 14

29

ルビー27

非常にわずかに変更されたバージョンこの経由)。

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

puts-lineが印刷される回数は指数関数的に増加します。

$ 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
カイザーチーフスに触発された回答
ベンジャクソン14

25

ラムダ計算-29

単純なラムダ項

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

この用語を1つのベータ削減分だけ減らすと、

((λ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)は、ラムダ計算のクインであるクラシックの単純なバリアントです。ここでのダブルセルフアプリケーションは、出力が2倍になることを意味します。


7
ラムダ計算では、ラムダ項の「実行」とは、単一のベータ削減を実行するのではなく、その正規形を計算することを意味すると主張します。また、用語には複数のredexを含めることができるため、「単一のredexの削減」はあいまいな操作です。
ペトルスキー-パドラック

2
あなたは正しいですが、この用語には通常の形式がないので、小さなステップの削減という点でこれについて話すのは理にかなっています。ラムダ計算には固有のセット評価がないため、名前で呼び出すセマンティクスで単一のredex トップレベル redexを削減するように「実行」するだけで定義できますか?
jozefg 14

3
さて、通常の形式がない用語は、終了しないプログラムに対応します。また、最上位レベルの redexの問題は、1つの用語に2つのredexeがあり、どちらもサブ用語ではないことです。どの基準を減らすかを選択することもできますが、標準のラムダ計算のセマンティクスから非常に遠く離れていると思います。(とにかくあなたの斬新なアイデアに感謝します。)
ペトルプドラク14

2
(λx.xxx)(λx.xxx):20
ファビオF. 14

2
(λx。xx)(λx。xxx)は1ステップで減少します
ベンミルウッド14

23

SHスクリプト、9

cat $0 $0

指数関数的に成長します。

実行するsh whatever.shか、実行可能として設定します。

Windows版はこちらです。


2
このコメントを書いている時点で、Quine Wikiページには、ファイルシステムからの読み取りが不正行為であると書かれています。
主ラテ

3
@LordRatte一方、挑戦は馬を書くことではありませんでした。
ジェイソンC

20

DC 11

とても簡単:

6579792
dfP

最初の行は、世代ごとに1回繰り返されます。

$ dc growing_quine.dc
6579792
6579792
dfP

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

最後の行は次の命令で構成されます:dスタックに置かれた最後の値を複製し(6579792)(実行するたびにもう1つコピーを取得するように)、fスタック全体(同じ数の束)を出力しますP数値(6579792)をバイトストリームとして出力しdfPます。


16

redcode(再帰的ソリューション)

これは、有名なImp であるredcodeで書き込み可能な最も簡単な戦士のコードです。

MOV 0, 1

実行されると、コードはメモリ内の次のアドレスに単一の命令のコピーを書き込みます。その後、実行するなど。


15

Python 3〜55

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

__ file__を1文字のファイル名に置き換えてファイルを保存することにより、これを短くすることができますが、この答えは質問の精神にあると感じました。1回の反復後、次を出力します。

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

3
これは馬ではありません。定義を参照してください
ペトルスキー-パドラック

14
@PetrPudlákまた、この質問のプログラムはありません。これはクインバリアントな問題であり、厳密なカインではありません。
AJMansfield

6

Smalltalk、125 61 57

ゴルフ版はほとんど読めないように見えるので、最初に説明します(そして実際の識別子を使用します)。

これは、「スタックオーバーフローを生成する最も奇妙な方法」自己修正メソッドの変形です。

このメソッドは、helloメッセージとその現在のソースを出力します(デモのみ)。次に、コードが修正され、長い文字列が出力され、インストールされます。最後に、新しいコードが再帰的に呼び出されます。

即時の暴走から身を守るために、ユーザーは各サイクルで確認できます。

オブジェクトでコンパイル:

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は何をしますか:

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、そのmanページを見たくなかった...
イェンスERAT

4

JavaScriptの、41、40の文字

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

初めて実行すると;f()、最後に別のものを出力します。その後の出力の実行では、各「入力」ソースが2回印刷されます。

alertより短いでしょうが、console.log複数の警告ダイアログを「the」出力とは見なしませんが、コンソールの複数の行を出力として呼び出すことは理にかなっています。


"f(f())"代わりに1バイトを保存できます"f();f()"
-Hedi

これは...私のために動作するようには思えない
破壊可能なレモン

4

J、1バイト

'

オンラインでお試しください!

オープンクォートは、明らかに、オープンクォートエラーを与えます:

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

Jインタープリターの性質により、エラーは STDERRではなくSTDOUTに出力されることに注意してください。

上記をコードとして実行すると、次のように出力されます。

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

それから

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

等々。コードが実行されるたびに、2行目に4バイトが左詰めされ|   、このチャレンジの要件が満たされます。

J、適切なクインバリアント、25バイト

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

オンラインでお試しください!

出力

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

そして、それは別々の行でそれ自身を2回出力します

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配列は同じ文字列の2行として印刷されます。




3

Microscript II、6バイト

非競合の言語が課題を後付けします。

"qp"qp

最初の反復はqp最後に余分なものを追加し、連続する各反復はこの元のプログラムの余分なコピーを最初に追加します。



2

EcmaScript 6(51バイト):

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

それはそれ自体のより長いバージョンを生成し、それ自体のより長いバージョンを生成することができ、それ自体のより長いバージョンを生成することができます...


2

PHP、38

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

実行ごとにセミコロンが追加されます。


セミコロンは役に立たないコードですか?
ジャスティン14

3
@Quincunx彼らはそうです、あなたは正しいです。しかし、有用なコードは何だと思いますか?
ComFreek 14

たぶん、あなたはに入れることができます';'。その後、より長い出力が得られます。
ジャスティン14

1
どうして<?=fgets(fopen(__FILE__,'r')).';';
イスマエルミゲル14

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

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 Common Lispの場合。あなたはスキップすることができるように私には見える`,
ダニエロ14

@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つのピリオドを含む文字列リテラルです。2番目の例では、juliaプロンプト自体を入力しても何も実行されません。Enterキーを押すことで実際にreplに改行文字を与えるだけで、入力よりも長い出力が生成されると考えました。
ML

「.....」はそれ自体のより大きなバージョンを生成しますか?
PyRulez

ああ、今理解した。再帰的でなければならないことに気付いた...解決策を修正する時間。ヒントをありがとう。
ML

1
コードは現在、ルールに従っていると思います。
ML


2

Evoloop、9×9の長方形(81セル)

Gollyに含まれてEvoloopセルオートマトン、「QUINE様」な方法で自分自身を複製するパターンをサポートしています。具体的には、これらのパターンにはそれぞれ「プログラム」が含まれています。パターンは、最初にプログラムを実行して(娘の「ボディ」を作成する)、それからプログラムを娘にコピーすることによってそれ自体を再現します。

上記は、より有名な「Langton's Loops」セルオートマトンとEvoloopに適用されますが、Evoloopには興味深い違いがあります。これは、各世代で成長するパターンを簡単に作成できることです。

(私の意見では、もっと興味深いのは、Evoloopが単純なセルラーオートマトンであり、自分自身を再現し、非常に生命のように進化するパターンが含まれているという事実です!これを行う唯一の既知のセルラーオートマトンはEvoloopとその子孫であると思います。しかし、Evoloopの欠点は、特定の「最良の」ゲノムが1つあることです。進化は常に最終的にこの1つのゲノムに収束します。

現在、この提出には2つの欠点があります。一つは、セルオートマトンの「出力」が何であるかが明確ではないということです。しかし、私は、自己複製オートマトンは、馬であることに「十分に近い」と思います。それは確かにそれほど興味深いものではありません!他の欠点は、これらのパターンが単に自分自身のコピーを作成するだけではないことです。元のパターンのコピーは、それ自体の無限のコピーを作成しようとしますが、これらのコピーは最終的に破壊的な方法で相互作用します。ですから、私は精神的にこの挑戦の要件を満たしていると思いますが、手紙ではそうではありません。

さらに苦労せずに、パターンは次のとおりです。

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
!

さて、しかしそれはどのように見えますか?次のようになります。

それ自体のますます大きなコピーを作成するセルオートマトンのパターン。

上記のアニメーションでは、最初のパターンが大きな娘を作成し、それが大きな孫娘を作成し、次に大きなcreates娘を作成し、最後にさらに大きなgreat孫を作成します。孫娘。このパターンを長時間実行した場合、このように永遠に続きます(または、おそらく、それらは最終的に、はるかに高速に再生できる進化した生物によって追い抜かれます;わかりません)。


1

バッチ、26

このコードを任意の.batファイルに配置すると、(無限ループで)実行が継続され、ファイルも大きくなります。

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

これはまったく機能しません。%0スクリプトを呼び出すために使用されるコマンドであり、.BAT拡張子がない場合があります。を使用%~nx0して、バッチファイルの完全なファイル名を取得できます。
ジェイソンC 14

@JasonC AFAIK、.bat実行する必要はありません。ファイル名がの場合、またはのexecute.batいずれexecuteかを入力できますexecute.bat。両方とも機能します。
ub3rst4r 14

ファイル自体が持っている必要があります.bat(あなたは拡張子なしでコマンドを入力すると、Windowsがしようと実行するための拡張機能をしかし、あなたはそれを実行するときに拡張子をオフに残すことができ.com.exeそして、.batそのために)。ファイル名がある場合はhello.bat、その>> %0名前のファイル書き込みますhelloオリジナルではない、hello.bat(そして実行することはできません)。
ジェイソンC 14

1

PYG(6)

P(Q,Q)

改行で区切られた独自のソースコードを印刷します。第二世代は

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

などなど。


1

OIL、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

最初にゼロを含む2行を印刷し、次に各行を1行目と比較します(ファイルが使い果たされる場合)、セル26にあるものを印刷します。結果の出力は次のようになります。追加されたを除いて同じですが、33何もしません。次回、別の行が追加されます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.