ab*1'3:*2+*0pnd3*:::::::::::::::1'3:*3+*0p1'3:*5+*0p1'3:*d+*0p1'3:*f+*0p1'3:*fa++*0p1'3:*fd++*0p1'4'3*f-*0p1'4'3*7-*0p1'4'3*5-*0p6:*:*4-1p6:*:*4+1p6:*:*8+1p6:*:*a+1p6:*:*8+2p6:*:*f1++2p6:*:*f3++2pn75*1-:1'3:*4+*0p6:*:*f2++2pnaa*:::::::::::::::::1'3:*6+*0p1'3:*7+*0p1'3:*f1++*0p1'3:*f2++*0p1'3:*fe++*0p1'3:*ff++*0p1'4'3*e-*0p1'4'3*d-*0p1'4'3*4-*0p1'4'3*3-*0p6:*:*3-1p6:*:*2-1p6:*:*b+1p6:*:*c+1p6:*:*9+2p6:*:*a+2p6:*:*f4++2p6:*:*f5++2pn67*::::::::::1'3:*8+*0p1'3:*a+*0p1'3:*f4++*0p1'3:*f5++*0p1'4'3*f-5-*0p1'4'3*c-*0p1'4'3*2-*0p6:*:*1-1p6:*:*d+1p6:*:*b+2p6:*:*f6++2pna5*::1'3:*9+*0p1'3:*f3++*0p6:*:*1pn68*:::::1'3:*b+*0p1'3:*f8++*0p1'4'3*f-2-*0p1'4'3*9-*0p1'4'3*1+*0p6:*:*f7++2pne8*:::::::1'3:*c+*0p1'3:*f9++*0p1'4'3*f-1-*0p1'4'3*8-*0p1'4'3*2+*0p6:*:*f2++1p6:*:*f+2p6:*:*f8++2pnf4*:1'3:*e+*0p1'4'3*3+*2pn77*::::1'3:*f6++*0p1'4'3*f-4-*0p6:*:*f1++1p6:*:*c+2p6:*:*e+2pnb4*1-::1'3:*f7++*0p6:*:*f+1p6:*:*d+2pnf4*1-::1'3:*fb++*0p6:*:*7+2p1'3:*1+*2pnf4*2-1'3:*fc++*0pn95*:::1'4'3*f-3-*0p1'4'3*a-*0p1'4'3**0p6:*:*1+1pn87*1'4'3*b-*0pnac*2-:1'4'3*6-*0p1'4'3*3+*0pnf4*3-1'4'3*1-*0pn88*2-6:*:*5-1pnc9*1-6:*:*2+1pnb4*:6:*:*3+1p6:*:*6+1pn88*6:*:*9+1pnd4*1-6:*:*e+1pnc8*2-:1'3:**1p1'3:**2pnd7*2+6:*:*4+2pn75*6:*:*6+2pn>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ab*1'3:*2+*0pnd3*:::::::::::::::1'3:*3+*0p1'3:*5+*0p1'3:*d+*0p1'3:*f+*0p1'3:*fa++*0p1'3:*fd++*0p1'4'3*f-*0p1'4'3*7-*0p1'4'3*5-*0p6:*:*4-1p6:*:*4+1p6:*:*8+1p6:*:*a+1p6:*:*8+2p6:*:*f1++2p6:*:*f3++2pn75*1-:1'3:*4+*0p6:*:*f2++2pnaa*:::::::::::::::::1'3:*6+*0p1'3:*7+*0p1'3:*f1++*0p1'3:*f2++*0p1'3:*fe++*0p1'3:*ff++*0p1'4'3*e-*0p1'4'3*d-*0p1'4'3*4-*0p1'4'3*3-*0p6:*:*3-1p6:*:*2-1p6:*:*b+1p6:*:*c+1p6:*:*9+2p6:*:*a+2p6:*:*f4++2p6:*:*f5++2pn67*::::::::::1'3:*8+*0p1'3:*a+*0p1'3:*f4++*0p1'3:*f5++*0p1'4'3*f-5-*0p1'4'3*c-*0p1'4'3*2-*0p6:*:*1-1p6:*:*d+1p6:*:*b+2p6:*:*f6++2pna5*::1'3:*9+*0p1'3:*f3++*0p6:*:*1pn68*:::::1'3:*b+*0p1'3:*f8++*0p1'4'3*f-2-*0p1'4'3*9-*0p1'4'3*1+*0p6:*:*f7++2pne8*:::::::1'3:*c+*0p1'3:*f9++*0p1'4'3*f-1-*0p1'4'3*8-*0p1'4'3*2+*0p6:*:*f2++1p6:*:*f+2p6:*:*f8++2pnf4*:1'3:*e+*0p1'4'3*3+*2pn77*::::1'3:*f6++*0p1'4'3*f-4-*0p6:*:*f1++1p6:*:*c+2p6:*:*e+2pnb4*1-::1'3:*f7++*0p6:*:*f+1p6:*:*d+2pnf4*1-::1'3:*fb++*0p6:*:*7+2p1'3:*1+*2pnf4*2-1'3:*fc++*0pn95*:::1'4'3*f-3-*0p1'4'3*a-*0p1'4'3**0p6:*:*1+1pn87*1'4'3*b-*0pnac*2-:1'4'3*6-*0p1'4'3*3+*0pnf4*3-1'4'3*1-*0pn88*2-6:*:*5-1pnc9*1-6:*:*2+1pnb4*:6:*:*3+1p6:*:*6+1pn88*6:*:*9+1pnd4*1-6:*:*e+1pnc8*2-:1'3:**1p1'3:**2pnd7*2+6:*:*4+2pn75*6:*:*6+2pn>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
オンラインでお試しください!
これはこれが地獄祭でした。
仕組み:
プログラムは、プログラムBをそれ自体の周りにアセンブルするputステートメントの束であり、2回シフトされたソースバイトの半分を出力します。
プログラムは実際には1300バイトのプログラムの2つのコピーであるため、1300バイトのプログラム全体が常に全体として実行されることが保証されます。
より良い説明:
すべてのBefunge-98 QUINEシンボル、このようなAが含まれている必要@
かq
と,
問題:それらのシンボルのどれもespecialy以来、良い開始点ではない@
とq
すぐにプログラムを終了します。
解決策:ソースコードからこれらの文字を取り除きます
問題:どうやって?
解決策:p
(put)コマンドを使用してソースコードを変更し、1バイトシフトされたソースコードの内容を印刷する必要な文字を含め、不正なコマンドを使用しないようにしg
ます。
問題:(これらが終了するときにため息)
putコマンドはn x y
、文字、x-coord、y-coordを決定する3つの値をポップしますが、これらの値の初期化が半分に分割されると、最初のソースコードに不良文字が書き込まれ、役に立たなくなりますクイニング用。
解決策:(最後の約束)
ソースコードのコピーを2 つ使用します。後者が「正しいもの」であるため、半分に分割されたputステートメント(pコマンド+定数初期化子)が誤って修正されます実行されません。これは、各ステートメントのコピーを2つ持つことで修正されます。これが機能するために最後に必要なことは、どのようにしてソースコード全体を半分にするかです。
回答:

これは、文字列バイトの2つのコピーがシフトされた理由の視覚的な証拠です==バイトシフトされた文字列の2つのコピー。つまり、コードの半分を取得し、バイトシフトしてから2回印刷できます(または、コードの半分を取得し、バイトシフトして、印刷し、[実際に発生すること]を繰り返します)
これの実装方法:0123456789abcdefがソースであると仮定します
Befunge擬似コード:
0123456789abcv;;"123456789abcdef" < go this way <--
>PS'0, repeat 2x ^
PSはPrint Stackを意味します(実際の命令ではありません)。ソースコードの半分を逆方向にスタックにプッシュしてからスタック""
を印刷し、次に'
最初0
に移動した最初の文字をフェッチ(コマンド)し、'
最後に印刷してバイトシフトを引き起こし、サイクルを繰り返します。もう一度、2番目のコピーを印刷します。対処する技術の1つは、ソース内のシンボルです。これは、ソースコードの実行中に記述すると問題を引き起こす可能性があります。これを回避するには、外部で処理するputステートメントを追加します。
これにより、コードは次のようになります。

説明:
緑のハイライト:ソースに文字を追加するコード
グレー文字(視界不良の可能性があります):緑のコードによって追加されるコード
赤のハイライト:ソースコードの後半の最初の文字を青の領域に移動するコード。
青のハイライト:赤のハイライトを参照
オレンジのハイライト:@
黄色の領域に(終了)コマンドを入力して、2バイトシフトされたコピーを書き込んだ後に終了することを確認するコード。
矢印を使用すると、コードフローがどのように進むかが明確になるはずです。
ここで最後の難しい部分があり
ます。赤ちゃんのソースコードはどこから来たのでしょうか?
短い答え:C#Magic
長い答え:C#コードでコンパイルされた手作業で作成された100以上のBefungeコードスニペット。私は手動で約100個の定数初期化子(特定の数をスタックするプッシュコード)を手動で作成し、カスタムC#プログラムを使用してそれを1300バイトのBefunge出力にコンパイルし、それを2回コピーして最後に作成しましたプログラム。
あなたはまだここにいるの?読んでくれてありがとう!(または、少なくとも最後までスクロールする)
私の悪いジョークは楽しくて迷惑ではなかったと思います。
注:このコード内のputステートメントは、不正なgコマンドを作成しません。
編集:開発者ツールを使用してTIOで次のJavascriptコードを使用してコードを検証しました
setInterval(()=>{document.getElementById("code").value =
document.getElementById("output").value;
document.getElementById("run").click();}, 2000);