20020xx##;;11++::''ee44**``kk@@::..;;
オンラインでお試しください!
説明
Befunge-98で耐放射線性を強化したコードを作成するのは悪くありません。「デルタ」(つまり、命令ポインタのステップサイズ)を手動で設定できるからですx
。そのため(2,0)
、デルタをに設定すると、それ以降は1文字おきにスキップされ、すべてのコマンドを単純に2倍にできます。厄介なことは2 0
、信頼できる方法でスタックの先頭に立つことです。実際に0 2 0
は、残りのプログラムが正しく機能する必要がありますが、それは無料です。これを行う方法は次のとおりです。
20020xx
各桁がそれ自体をプッシュすることに注意してください。したがって、完全なプログラムで2 0
は、単純に無視する開始があります。
したがって、プログラムから最初の文字または2番目の文字を削除することは、これらの数字を使用しないため無関係です。同様に、3番目の文字を削除することは2番目の文字を削除することと同じであるため、それについても心配する必要はありません。
他の2つのケースで何が起こるか考えてみましょう。4番目の文字のドロップ:
2000xx
デルタがに設定されていることに注意してください(0,0)
。しかし、これは命令ポインタをまったく動かさないので、同じものx
がすぐに再び実行され、今回はポップし(2,0)
、すべてがうまくいきます(後の目的のためにスタックの下部に暗黙的なゼロがあります)。
代わりに5番目の文字をドロップしましょう:
2002xx
これで、デルタがに設定され(0,2)
ます。ただし、水平方向の動きはまだないため、IPはすぐに折り返されx
、正しいデルタが設定されます。
この時点から、文字の複製とこの最初の部分は、常にスキップされるため、基本的に無視できます。
...#;1+:'e4*`k@:.;
;
次回は、まですべてをスキップするコメントコマンドの一種で;
遭遇しました。しかし、我々は最初に飛び越える;
と#
の間にこれだけの部分;
以降そのポイントから実行されます。
1+ Increment the top of the stack.
: Duplicate it.
'e Push 101.
4* Multiply by 4 to get 404.
` Greater-than check. Pushes 1 once the top
reaches 405, otherwise 0.
k@ Terminate the program that many times.
:. Print a copy of the top of the stack (and a space).