方向のグリッドと開始位置と終了位置を指定して、2点間のパスを完了するために必要な方向グリッドの置換の最小数を決定します。グリッドは二重円筒形です。これは、例を挙げればより明確になります。
例
例として次のグリッドを見てみましょう:
>>>>v
>>>><
<<<<<
(座標がまたはで、最初の行と左の列がである)(1, 1)
で開始して終了します。次に、1つの可能な解決策は、とをに置き換えることです。これにより、最終的なグリッドは次のようになります。(1, 3)
(x, y)
(col, row)
1
(1, 1)
(1, 2)
v
v>>>v
v>>><
<<<<<
から始まり(1, 1)
、パスはにつながり(1, 3)
ます。しかし、短いソリューションを交換することである、存在する(5, 2)
とv
、最終的なグリッドはこれです:
>>>>v
>>>>v
<<<<<
から始めて(1, 1)
、かなり長いパスがにつながり(1, 3)
ます。
一番上の行の何かを^
作品でも置き換えます(@Spitemasterに感謝します)。
入力
入力は、4つの可能な値の長方形グリッドと2つの座標で構成されます。グリッドは適切な形式で使用できます。たとえば、文字または整数の行列、文字列リストなど。グリッドの次元を要求することもできます。座標は適切な形式で取得できます。たとえば、整数ペア、複素数などです。0または1のインデックスを選択できます。
出力
出力は単一の整数であり、パスを最初から最後まで閉じるのに必要なグリッド置換の最小数である必要があります。
ルールと仕様
- 標準抜け穴が適用されます
- グリッドは二重円筒形です。つまり、上から上に移動すると下に移動し、左から左に移動すると右に移動します。
サンプルケース
サンプルケースは、文字行列と1インデックスの座標として与えられます。
事例1
入力
>>>>v
>>>><
<<<<<
1 1
1 3
出力
1
説明
例を参照してください。
事例2
入力
<<<<<
v>v>v
>>>>>
1 1
5 3
出力
1
説明
あなたはどちらか置き換えることができ(1, 1)
てv
たり(2, 1)
してv
。最初のケースでは、から始まり(1, 1)
、パスはまっすぐ下に行き、次に目的地まで右に行きます。2番目のケースでは、パスは左から右にループし、到達し(2, 1)
、下に行き、右に行き、下に行き、目的地に到達するまで右に行きます。
事例3
入力
^^^^^^
><<>>>
vvvvvv
2 2
5 2
出力
2
説明
最良の変更は、中央の列を左からポイントまで折り返すことです。つまり、中央の行の最初と最後のアイテムを作成し<
ます。また、作る2 2
と3 2
両方>
。
これはコードゴルフの挑戦なので、最短のコードが勝ちます!
><
ていますか(両方の位置に到達するように)それはピンポンを前後に動かしますか、それともそれらの間に壁があるようなものですか?
^
またはのいずれかで一番上の行を変更して機能しますv
。