'98 年の元の仕様によると、Ben Olmstead Malbolge VM は、前の 2 つのセルでクレイジーな操作を使用して空のメモリ セルを埋めます。「初期化されていないセルは、前の 2 つのセルに対して op を繰り返し実行することによって設定されます。」いえ
[m] = crz [m-2], [m-1]
プログラムに命令が 1 つしか含まれていない場合、正気を保つためにどうすればよいでしょうか?
または、最後の文字は常に であると想定する必要がありEOF
ますか?
'98 年の元の仕様によると、Ben Olmstead Malbolge VM は、前の 2 つのセルでクレイジーな操作を使用して空のメモリ セルを埋めます。「初期化されていないセルは、前の 2 つのセルに対して op を繰り返し実行することによって設定されます。」いえ
[m] = crz [m-2], [m-1]
プログラムに命令が 1 つしか含まれていない場合、正気を保つためにどうすればよいでしょうか?
または、最後の文字は常に であると想定する必要がありEOF
ますか?
実装と言語法から判断すると、2 つのオプションがあります。
「前の 2 つのセル」の定義を文字通り、前の 2 つのセルと見なすと、仕様に従って実行できないため、単一文字または空のマルボルジ プログラムは言語では違法です。
の定義を考えると[m] = crz [m-2], [m-1]
面白くなります。主な実装 (おそらく残りのほとんどと同様) は、メモリ ポインターにunsigned short
(または) を使用します。( )からint
減算しようとすると、10 進数になります(詳細については、この回答を参照してください)。これは、malbolge のメモリ制限を少し超えています。このグリッチは通常のマシンでは(ほぼ)完全に動作し、セルを異常な操作のコンピューティングに使用します (環境外のメモリに害を与えることさえありません!) が、限られたメモリまたは仮想マシンでは失敗します。2
1
m-2
0xffff
65535
59049
0xffff
0xffffffff
代わりに が表示される場合があります。0xffff
要するに、
0xffff
しますが、環境メモリに沿ってランダムな値につながるランダムな値のメモリ セルであるため、実行自体に失敗します。一方、1 バイトのマルボルジ プログラムには何が期待できるでしょうか。