RoboZZleインタープリター
あなたの仕事は、RoboZZleインタープリターを作成することです。ゲームに慣れていない場合は、robozzle.comのビデオをご覧になるか、以下の説明をお読みください。 ロボットは、赤、緑、青、または黒に着色された正方形の長方形のグリッドに住んでいます。黒い四角はアクセスできません。他はアクセス可能であり、それらのいくつかは星を含んでいます。目標は、黒い四角を踏んだり、地図から落ちたりすることなく、すべての星を集めることです。ロボットは1つの正方形を占め、特定の方向(左、右、上、または下)を向きます。これは、サブルーチンF1、F2、...、F5にグループ化されたアセンブリのような命令に従います。指示は、述語(「なし」、「赤の場合」、「緑の場合」、「青の場合」)とアクション(「進む」、「左に曲がる」、「右に曲がる」)のペアです。 「現在の正方形の赤をペイント」、「緑をペイント」、「青をペイント」、「何もしない」、「F1を呼び出す」、「F5を呼び出す」)。サブルーチンの呼び出しはスタックを使用し、再帰的である場合があります。従来のプログラミングと同様に、サブルーチンの最後の命令が完了した後、サブルーチンが呼び出されたところから実行が続行されます。実行はF1の最初の命令から始まり、ロボットが星のあるすべての正方形を訪問するか、ロボットが黒い四角またはマップの外側を踏むか、1000命令が実行されるまで続きます(失敗した述語と「何もしない」アクション)カウントしない)、または実行する命令がなくなる(スタックアンダーフロー)。 入力: a-マップをエンコードする12x16文字のマトリックス(通常は言語で表される文字列の配列など)- '#'アクセスできない(黒い)四角形、'*'星付きの四角形'.'、その他 c-アクセシブルな正方形の色を表す12x16文字のマトリックス- 'R'(赤)、'G'(緑)、または'B'(青)。アクセスできない正方形は、3つのうち任意の文字で表されます。 yおよびx-ロボットの0ベースの行と列。a[y][x]であることが保証されています'.' d-ロボットが向いている方向:0 1 2 3右用、下、左、上、すなわちに向けました(y,x+1)、(y+1,x)、(y,x-1)、(y-1,x) f-単一の文字列、F1 ... F5の連結された実装。各実装は、(空の可能性がある)述語とアクションのペアのシーケンスであり(サブルーチンごとに最大10ペア)、で終了します'|'。 述語:'_'なし、'r'赤、'g'緑、'b'青 アクション:'F'前進、'L'左折、'R'右折、'r'赤く'g'塗る、緑に'b'塗る、青に塗る、'1'F1を'5'呼び出す...、F5を呼び出す、'_'何もしない 上記のように入力に名前を付ける必要はありませんが、それらの値は指定どおりでなければなりません。 出力:(1またはtrue)ロボットがルールに従ってすべての星を収集する場合、0(false)そうでない場合。 例: a=["################","################","##*....*...*#.##","##.####.#####.##","##.####.#####.##","##.####*...*#.##","##.########.####","##*........*#.##","################","################","################","################"] c=["RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRBBBBRGGGGRRRR","RRBRRRRGRRRRRRRR","RRBRRRRGRRRRRRRR","RRBRRRRRGGGBRRRR","RRBRRRRRRRRGRRRR","RRRBBBBGGGGBRBRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR"] y=2; x=6; d=2 // and then depending on "f": f="_FrLg2_1|_FbLrR_2||||" // result:1 f="_FrRg2_1|_FbLrR_2||||" // result:0 (stepped on a black square) f="_FrLrL_1|_FbLrR_2||||" // result:0 (1000-step limit exceeded) f="_FrLg2__|________||||" …