^
.
+
8
f
0
o
a
o
~
:
?
~
:
?
:
-
*
4
8
:
^
^
}
*
3
d
'
オンラインでお試しください!または、すべての突然変異を検証します。
元のプログラムの仕組み(時代遅れ)
インタープリターはcell (0、0)で始まります。^
方向を上向きに設定するため、命令ポインター(IP)はセル( 0、20)に回り込みます。
'
文字列モードをアクティブにします。次の文字が見つかるまで'
、IPの下のすべての文字がスタックにプッシュされます。'
ラップアラウンド後に同じことが再び見つかるので、プッシュします
d3*}^^:84*=?~oao0f.^
IPは( 0、19)で着陸しますが、まだ上向きです。d3*}
プッシュ13 = 0xdを実行してから3を実行すると、両方の値が乗算され(39 / 単一引用符)、スタックが右に回転します。これにより、スタックは次のようになります。
'd3*}^^:84*=?~oao0f.^
次の2つの命令(^
)は、この時点では何もしません。
:84*=
スタックの最上部を複製し、8と4をプッシュしてそれらを乗算(32 / スペース)し、スペースとの等価性について複製された文字をテストします。変更されていないプログラムの場合、これは常に0をプッシュします。
?
スタックの最上部が偽である場合、次の命令をスキップします。元のプログラムで~
は常にそうであるため、常にスキップされます。
oao
ポップとスタックの上部を出力し、押圧10 / 改行は、ポップと印刷改行。
最後0f.
にセル( 0、15 ^
)(一番下)にジャンプし、スタックの次の文字からやり直します。
スタックが空になると、ソースコード全体が印刷されます。:
失敗し、プログラムは終了します。
変異したプログラムの仕組み(時代遅れ)
改行以外の文字を複製すると、プログラムは水平方向にのみ拡張されます。プログラムは垂直に実行されるため、これらの追加の命令は実行されません。
bottomostする前に改行を複製する^
細胞シフトする(0、14)及び(0、15)に(0、15)及び(0、16) 。0f.
は、一番下のセルにもジャンプするようになります。これ^
もである^
ため、プログラムはシフトの影響を受けません。
最後に、重複する改行文字も文字列を変更します。短い行にはスペースが埋め込まれるため、32 / スペースが改行の位置に挿入されます。スペースのために1を84*=
プッシュするので、次の命令をスキップしません。この場合は、ポップや破棄スペース、以下のように、上の文字印刷された空間を代わりに。?
~
o
0
そして00
CJamでは両方の出力0
。