この質問は、オンラインでプレイできる番号配置パズルタワー(スカイスクレイパーとも呼ばれます)に基づいています。あなたの目標は、パズルの解決策を見つけて、手がかり(各行と列に沿って見える塔の数)を決定することです。これはコードゴルフなので、バイト数が最も少なくなります。
タワーの仕組み
-タワーパズルの解決策は、ラテン方陣であるn*n
すべての行と列が数字の順列を含有するグリッド1
を介しn
。例n=5
は次のとおりです。
4 3 5 2 1
5 4 1 3 2
1 5 2 4 3
2 1 3 5 4
3 2 4 1 5
各行と列には、両端に次のような手がかりが付いています。
2 3 1 4 5
v v v v v
2 > 4 3 5 2 1 < 3
1 > 5 4 1 3 2 < 4
2 > 1 5 2 4 3 < 3
3 > 2 1 3 5 4 < 2
3 > 3 2 4 1 5 < 1
^ ^ ^ ^ ^
2 2 2 2 1
各手がかりから数である1
とn
、その数字は、その高さの塔として扱われる場合は、その方向からの行/列に沿って見て「を参照してください」どのように多くの塔を示します。各タワーは、背後にある短いタワーをブロックします。言い換えれば、あなたが見ることができる塔は、それらの前のどの塔よりも高い塔です。
たとえば、最初の行を見てみましょう。
2 > 4 3 5 2 1 < 3
それはの手がかりがある2
あなたが見ることができるので、左からを4
して5
。4
ブロック3
からの光景と5
他のブロックのすべて。右から、あなたが見ることができます3
:塔を1
、2
と5
。
プログラム要件
数字のグリッドを取り込んで、左上から時計回りに手がかりを出力または印刷するプログラムまたは関数を作成します。
入力
のn*n
ラテン方格2<=n<=9
。
形式は柔軟です。数字または数字を含むグリッドまたはリストを表す任意のデータ構造を使用できます。行間にセパレーターが必要な場合や、セパレーターがまったく必要ない場合があります。いくつかの可能性は、リスト、リストのリスト、マトリックス、トークンで区切られた文字列です
43521 54132 15243 21354 32415,
またはスペースなしの文字列。
あなたはn
入力の一部として与えられていません。
出力
手がかりを左上から時計回りに戻すか、印刷します。したがって、最初に上の手がかりが右向きに読み、次に右の手がかりが下向きに読み、次に下の手がかりが左向きに読み、左の手がかりが上向きに読みます。
これは23145 34321 12222 33212
前の例になります
2 3 1 4 5
v v v v v
2 > 4 3 5 2 1 < 3
1 > 5 4 1 3 2 < 4
2 > 1 5 2 4 3 < 3
3 > 2 1 3 5 4 < 2
3 > 3 2 4 1 5 < 1
^ ^ ^ ^ ^
2 2 2 2 1
入力と同様に、リスト、文字列、または任意の順序付けられた構造を使用できます。4つの「グループ」は、ネスト構造またはフラット構造で分離することも、分離しないこともできます。ただし、形式は各グループで同じである必要があります。
テストケースの例:
(入力/出力形式はこれらと同じである必要はありません。)
>> [[1 2] [2 1]]
[2 1]
[1 2]
[2 1]
[1 2]
>> [[3 1 2] [2 3 1] [1 2 3]]
[1 2 2]
[2 2 1]
[1 2 3]
[3 2 1]
>> [[4 3 5 2 1] [5 4 1 3 2] [1 5 2 4 3] [2 1 3 5 4] [3 2 4 1 5]]
[2 3 1 4 5]
[3 4 3 2 1]
[1 2 2 2 2]
[3 3 2 1 2]
>> [[2 6 4 1 3 7 5 8 9] [7 2 9 6 8 3 1 4 5] [5 9 7 4 6 1 8 2 3] [6 1 8 5 7 2 9 3 4] [1 5 3 9 2 6 4 7 8] [3 7 5 2 4 8 6 9 1] [8 3 1 7 9 4 2 5 6] [9 4 2 8 1 5 3 6 7] [4 8 6 3 5 9 7 1 2]]
[4 2 2 3 3 3 3 2 1]
[1 3 3 2 2 2 2 3 3]
[4 3 2 1 2 3 3 2 2]
[3 1 2 4 3 3 2 2 5]
便宜上、フラット文字列形式の同じテストケースを以下に示します。
>> 1221
21
12
21
12
>> 312231123
122
221
123
321
>> 4352154132152432135432415
23145
34321
12222
33212
>> 264137589729683145597461823618572934153926478375248691831794256942815367486359712
422333321
133222233
432123322
312433225
≢¨∪¨↓⌈\(⍉⍪⌽⍪⍉∘⌽∘⊖⍪⊖)