単純な2D言語を定義してみましょう。信じられないほど元の名前befingeを与えます。Befingeには5つの指示があります。
<>^v
、ほとんどの2Dエソランのように、それぞれの方向に命令ポインターをリダイレクトします。.
ノーオペレーションです。
命令ポインタは、左上隅から右に向かって始まります。命令ポインターが端に達すると、プログラムは停止します。すべてのBefingeプログラムは明らかに停止するか、何もしない無限ループに入ります。以下に2つの例を示します。
停止:
>.v
..<
ノンハルティング:
>....v
..v..<
..>v..
^..<..
停止の問題はチューリング完全言語では解決できませんが、この問題では解決できます。タスクは、befingeプログラムを表す文字列を入力として受け取り、停止するかどうかに応じてtrueまたはfalseの値を返すプログラム(または関数)を作成することです。
- 入力はこれらの文字のみで構成され、スペースを埋めて長方形を形成すると想定できます。
- 指示には5文字の任意のセットを使用できます(例:)
adws
。
テストケース
停止:
.
v>
>^
....v....
....>...v
.^..<....
.......v<
.......v.
....^..<.
v<>v>v^
>v^>^>v
<>>^v<v
v^<>v^<
ノンハルティング:
>..v
^..<
>v<
v<.
>v.
v<.
>.^
>.>.>.v
.><.<.<
これはcode-golfであるため、最短のプログラム(バイト単位)が優先されます。
>..>.
やのような90度以外の方向に曲がる例もありません><
。