G○○gle Code Jam は G○○gle 社が年に 1 度開催するコンテストである. 優勝者は G○○gle への入社を許される,世界最高峰のコンテストだ. しかし勿論,それ以外の参加者は帰らぬ者となる.
G○○gle Code Jam では自分の好きなプログラミング言語や処理系を使うことができる. 僕は Defunge という自らが開発したプログラミング言語で参加することにした. この言語を使えば,計算困難な問題はおろか,判定不能な問題ですら解決できる気がしている.
与えられるプログラムが停止するかを判定するプログラムを作成せよ. 与えられるプログラムは,以下で説明するプログラミング言語 Defunge で記述されている.
Defunge のプログラムの命令は 1 文字であり,1 次元の列ではなく 2 次元の格子状に並んでいる. 下図は,Defunge のプログラムの例である:
6>--v. .^--_@
Defunge の言語仕様は以下のようになっている.
Defunge の命令は以下の通りである.
入力の最初の行は 2 つの整数 R, C を含む.
続く R 行はプログラムを表す。それぞれ C 文字の文字列を含む。
プログラムが停止する可能性がある場合は YES と出力せよ.
そうでないとき,NO と出力せよ.
入力例 1:
2 6 6>--v. .^--_@
入力例 1 に対する出力:
YES
入力例 2:
2 6 5>--v. .^--_@
入力例 2 に対する出力:
NO
入力例 3:
2 6 .>--v. .^--?@
入力例 3 に対する出力:
YES
Defunge は Befunge と類似している. Befunge の理解は Defunge の理解を助けるかもしれないが, 異なる点も多いため,注意せよ.