この課題では、あなたがのために通訳書き込みます2 Ω(として転写TwoMega)、ゆるくに基づく言語brainfuck無限次元の収納スペースとを。
言語
2 Ωは、状態の3枚が含まれています。
テープ全て0に初期化ビットの無限のリストである、それは、左端の要素、ない右端の要素を有しています。
メモリポインタテープの要素のインデックスである非負整数です。上位のメモリポインタは、さらに右側のテープセルを指します。0のメモリポインタは、左端の要素を参照します。メモリポインタは0に初期化されます。
ハイパーキューブ概念的であり、∞ハイパーキューブの幅はわずか2細胞にすべての次元で結合したが、寸法の無限の数を意味している0に初期化ビットを含む各々がセルの次元「ボックス」、細胞は数えられない。
ハイパーキューブへのインデックスは、ハイパーキューブ内のセルを参照するビットの無限リストです(ビットの有限リストを使用して有限次元のハイパーキューブを参照するのと同じ方法で)。テープはビットの無限リストであるため、テープ全体は常にハイパーキューブの要素を参照します。この要素は参照対象と呼ばれます。
2 Ωは、 7種類の文字に意味を与えます:
<
メモリポインタを1だけデクリメントします。0未満にデクリメントすることは未定義の動作であるため、処理する必要はありません。>
メモリポインタを1だけインクリメントします。!
リファレントでビットを反転します。.
リファレントでビットを出力します。^
テープ上のメモリポインターが指すセルのビットを、参照先のビットの逆に置き換えます。[x]
x
リファレントのビットが1である限り、コードを実行します。
チャレンジ
あなたの仕事は、文字列を入力として受け取り、その入力を2Ωプログラムとして実行するプログラムを作成することです。
これはcode-golfなので、有効な最短の回答(バイト単位)が優先されます。
ノート
- プログラムは文字のみで構成され、適切にネストされる
<>!.^[]
と想定でき[]
ます。 - インタプリタは、システムで利用可能なメモリによってのみ制限されるべきです。サンプルプログラムを妥当な時間で実行できるはずです。
サンプルプログラム
印刷1:
!.
印刷010:
.!.!.
永久に0を印刷します。
![!.!]
永遠に0を出力します!
。
[.]![!.!]
cat
プログラムを作成するための招待状:入力を取得するための指示がないようです。
.
-単一のゼロを出力してから存在します。!^!.
-1つ出力してから終了します。もっともっといいのに。現時点では、提出物を確認して検証するために提出物を理解する必要があります(したがって、賛成投票します!)
[0,0,0,0,0,0,0...]
(つまり!
、プログラムの開始時にaが存在すること)によって与えられます。
[.]![!.!]
、そのセルの値を永久に印刷することができます
1
テープ上のs の数は常に有限であるため、ストレージセルの数は実際には数えられません。実際、自然数とテープの状態の間にはかなり単純な全単射があります(テープの内容を逆2進数として解釈します)。これは、ハイパーキューブが基本的に無限の1D配列であり、整数ポインター値のビットを反転することによってアクセスされることを示しています、brainfuckのようにイン/デクリメントする代わりに。