前書き
障害物コースで暴走した車に閉じ込められているという不幸があります。車のすべての機能は応答しません。損傷したステアリングシステムを除きます。直進することも、右折することもできます。車を安全に誘導できますか?
力学
あなたの車は8x8マップの左上隅から始まり、右下隅で安全になろうとしています。車の向きは(最初は右)、90度単位で測定されます。車は次の2つのアクションのいずれかを実行できます。
- 1マス先に進む、または
- 時計回りに90度回転してから、1マス先に進みます
車は、1つの広場で180度回転するのに十分なほど鋭角に回転できないことに注意してください。
正方形のいくつかは障害です。車が障害物の広場に入ると、クラッシュします。8x8コースの外側はすべて障害物であると想定されているため、コースを離れることはクラッシュに相当します。
右下の四角は安全な四角で、車が障害物コースを脱出できるようにします。開始正方形と安全な正方形は障害物ではないと想定されます。
仕事
障害物コースを表す8x8配列(マトリックス、リストのリストなど)を入力として受け取るプログラムまたは関数を作成する必要があります。プログラムはブール値、または同様の真実を返すか印刷します。車がクラッシュせずに安全な広場に到達できる場合(マップが解ける場合)、出力はになりTrue
、そうでない場合はになりFalse
ます。
得点
標準のゴルフ規則-勝者はバイト数が最も少ないコードです。
ボーナス:
解決可能なマップの場合、コードが有効な一連のドライバー入力を出力して、車を安全な広場に導く場合、スコアから10パーセントポイントを差し引きます。出力形式の例は次のとおりです
SRSSR
(ストレート、右、ストレート、ストレート、右を示す)。この出力は、標準出力を置き換えTrue
ます。解決できないマップの場合、コードの出力が、クラッシュが避けられない状況と、障害物コースを永遠に運転できる状況とを区別する場合、スコアから10パーセントポイントを差し引きます。出力例
Crash
は、衝突が避けられない場合、またはStuck
車が障害物コースに永久にスタックしている場合です。これらの出力はFalse
、解決できないマップの標準出力を置き換えます。
例
プログラムに次のような8x8配列が指定されている場合:
[[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0],
[1, 1, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 1, 0, 0, 0, 1, 0]]
これは、障害物を示す黒い四角が付いたこのようなマップとして解釈されます。
可能な解決策は次のとおりです。
解決策が存在するため、プログラムはTrue
このマップを返す/印刷する必要があります。ここに示されている一連の動きはSSSSRSRRRSRSSRRRSSRSSS
です。
Crash
とStuck
。彼らがいるのは彼らがここにいるからです。行2が満たされ、他はすべて空->Crash
。行7が満たされ、他はすべて空->Stuck