放火犯が町を歩き回って、非常に特定のパターンに従って犠牲者を選ぶことを想像してください(あるいは、庭の周りを飛んで、非常に特定のパターンに従って花粉を取るために花を選ぶ蜂を想像してください)。町がN×N行列であるとします。ここで、Nは2以上の整数です。放火犯は左上隅から開始し、家の前にM個のスポットを順番に設定します(Mは現在いる家の数です)。各火災の後に移動する方向を順番に変更します。東⟶南⟶西⟶北⟶東⟶南...など。子守唄放火犯のMは、町を出るようにするMの値です(つまり、憎むべきことを止める前に最後に訪れる家)。これは例で理解しやすい方法です。たとえば、次のマトリックスをご覧ください。
3 2 3 2 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1
- 左上隅から開始するので、M = 3(
X
放火犯の現在位置と前位置をマークします):X 2 3 2 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1
- 既知の順序によると、最初に東のM(3)スポットに行き、2に着地するため、Mはそれに応じて変化します。
X 2 3 X 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1
- その後、南に2スポット行き、Mは1になります。
X 2 3 X 7 3 1 4 1 6 2 5 3 X 1 4 4 3 2 4 1 1 1 1 1
- これで西に1スポット移動し、Mは3になります。
X 2 3 X 7 3 1 4 1 6 2 5 XX 1 4 4 3 2 4 1 1 1 1 1
- 北に3スポット移動すると、町を出ます!したがって、3はこの放火犯の子守isです。
バツ X 2 3 X 7 3 1 4 1 6 2 5 XX 1 4 4 3 2 4 1 1 1 1 1
N×N行列(オプションでNを入力として使用することもできます)が与えられた場合、放火犯の子守luを見つけます。より多くのテストケースを生成し、放火犯の経路を視覚化できるプログラムを作成しました:オンラインで試してみてください!
- 放火犯は子守haveを持っていると仮定できます(つまり、実際に行列から抜け出すことができます)。
- 簡単にするために、マトリックスには9(桁)以下の正の整数のみが含まれます。正の整数を処理するソリューションは大歓迎です。
- 放火犯は、彼らが移動している感覚が初めてと異なる場合に、すでに火傷した場所に着陸できることに注意してください。このようなシナリオでは、その要素の値を取得して、通常どおりに再度移動します。
- デフォルトではこれらの抜け穴は禁止されていることに注意しながら、任意のプログラミング言語で競争し、任意の標準的な方法で入力を取得し、出力を提供できます。これはcode-golfであるため、すべての言語の最短の送信(バイト単位)が優先されます。
テストケース
------------- 9 2 3 1 7 2 8 7 6 子守a:9 ------------- 2 1 2 1 3 1 1 2 1 2 2 1 1 1 1 3 子守a:2 ------------- 3 2 3 2 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1 子守:3 ------------- 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 子守a:2 ------------- 3 2 1 2 1 1 1 2 3 2 3 2 1 1 2 1 1 1 3 1 2 3 1 1 1 1 1 1 4 5 2 3 1 1 1 1 2 1 2 1 2 2 1 2 2 3 2 1 2 子守:3 -------------
異なる形式のマトリックス:
[[9、2、3]、[1、7、2]、[8、7、6]] [[2、1、2、1]、[3、1、1、2]、[1、2、2、1]、[1、1、1、3]] [[3、2、3、2、7]、[3、1、4、1、6]、[2、5、3、1、1]、[4、4、3、2、4]、[ 1、1、1、1、1]] [[1、2、1、2、1、2]、[1、2、1、2、1、2、2]、[1、2、1、2、1、2、2]、[1、2、1、 2、1、2]、[1、2、1、2、1、2、2]、[1、2、1、2、1、2、2]] [[3、2、1、2、1、1、1、1]、[2、3、2、3、2、1、1、1]、[2、1、1、1、1、3、1、2]、[ 3、1、1、1、1、1、1、1]、[4、5、2、3、1、1、1、1]、[1、2、1、2、1、2、2]、[1、 2、2、3、2、1、2]]
5番目のテストケースは、視覚化するのに非常に興味深いものです。