いくつかのテキストベースのローグのようなものは、あなたが壁に足を踏み入れることを許さず、あなたが行おうとするならあなたにあなたの動きを与えます。プレーヤーを最も近い有効な方向に移動できるのに、なぜそうするのですか?
チャレンジ
方向と3 x 3のキャラクターのグリッドが与えられると、プレーヤーが一歩進んだ後に同じグリッドを出力する関数のプログラムを書きます。
例えば、
9
#..
.@#
#.#
になる
#.@
..#
#.#
入力
方向は1〜9の1桁の数字で示され、それぞれが8つの基本方向に対応し、静止しています。これは、キーパッド上の数字の相対的な位置から導出されます。
NW N NE .. \ | / ... 7 8 9 W- 4 5 6 -E ... 1 2 3 ../ | \ SW S SE
ただし、789、456、123の代わりに123、456、789の番号を使用することもできます。言い換えると、必要に応じて上下2行または番号を入れ替えることができます。これらは、許容される唯一の2つのインデックスの組み合わせです。3 x 3グリッドは、歩行可能な床、壁、およびプレーヤーを表す3つの異なる印刷可能なASCII文字で構成されます。(テストケースで
.は、床に使用され、#sは壁であり@、プレーヤーです)- プログラムで使用する文字を選択することもできますが、回答にそれらを明記する必要があり、複数の試行にわたって一貫している必要があります。
- 文字を表す文字は常に3 x 3グリッドの中央にあり、方向は常に1〜9を含みます(含む)。
- 任意の順序で入力を取得できます
- 3 x 3のグリッドは、char配列、string配列、9 lengthの文字列、または別の妥当な代替として入力できます。
出力
- 関数からの戻り、またはStdOutまたは最も近い代替への出力
- 末尾のスペースと改行が許可されます
- 入力と同じ文字表現を使用する必要があります
- 入力に許可されているのと同じ形式が出力に許可されています
プレイヤーの動き
指定された方向が壁によってブロックされている場合(たとえば、上記の例に方向6がある場合)、最も近い2つの方向を確認します。
- 1つ(および1つだけ)の方向が空いている場合、その方向にプレーヤーを移動します。
- 無料の方向がない場合は、次に近い2つの方向(方向5を除く)を確認します。周りを包み込んで、開いている方向(壁に囲まれたプレーヤー)が見つからない場合は、プレーヤーを動かさないでください。
- 両方の方向が開いている場合、ランダムに移動する方を選択します(必ずしも均一ではありません)。
指定された方向が5の場合、プレーヤーを動かさないでください
テストケース
(#=壁、.=床、@=プレーヤー)
入力: 9 #.. 。@# #。# 出力: #。@ ..# #。# 入力: 3 #.. 。@# #。# 出力: #.. ..# #@# 入力: 7 ##。 #@# ..# 出力: ## @ ##。 #。#または#。# ..#@。# 入力: 5 ... 。@。 ... 出力: ... 。@。 ... 入力: 2 ### #@# ### 出力: ### #@# ###
得点
これはcode-golfであるため、バイト単位の最短回答が優先されます。
123;456;789代わりに指示を使用できます789;456;123か?

yuhjklbnない?RIP。