Cette question est basée sur les tours de puzzle de placement de numéros (également connues sous le nom de gratte-ciel), que vous pouvez jouer en ligne . Votre objectif est de trouver une solution au puzzle et de déterminer les indices - le nombre de tours visibles le long de chaque ligne et colonne. C'est le golf de code, donc le moins d'octets gagne.
Fonctionnement des tours
La solution à un casse - tête Towers est un carré latin - une n*n
grille dans laquelle chaque ligne et colonne contient une permutation des nombres 1
par n
. Un exemple pour n=5
est:
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
Chaque ligne et colonne est étiquetée avec un indice à chaque extrémité comme:
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
Chaque indice est un nombre de 1
à n
qui vous indique le nombre de tours que vous "voyez" en regardant le long de la ligne / colonne de cette direction, si les nombres sont traités comme des tours de cette hauteur. Chaque tour bloque des tours plus courtes derrière elle. En d'autres termes, les tours que vous pouvez voir sont celles qui sont plus hautes que n'importe quelle tour avant elles.
Par exemple, regardons la première ligne.
2 > 4 3 5 2 1 < 3
Il a un indice de 2
gauche parce que vous pouvez voir le 4
et le 5
. Le 4
bloque la 3
vue et 5
bloque tout le reste. De la droite, vous pouvez voir des 3
tours: 1
, 2
et 5
.
Exigences du programme
Écrivez un programme ou une fonction qui prend dans la grille des nombres et des sorties ou imprime les indices, dans le sens horaire à partir du coin supérieur gauche.
Contribution
Un n*n
carré latin avec 2<=n<=9
.
Le format est flexible. Vous pouvez utiliser n'importe quelle structure de données qui représente une grille ou une liste contenant des nombres ou des caractères numériques. Vous pouvez avoir besoin d'un séparateur entre les lignes ou pas de séparateur du tout. Certaines possibilités sont une liste, une liste de listes, une matrice, une chaîne séparée par jeton comme
43521 54132 15243 21354 32415,
ou une chaîne sans espaces.
Vous n'êtes pas donné n
dans le cadre de l'entrée.
Sortie
Retournez ou imprimez les indices en partant du coin supérieur gauche et dans le sens des aiguilles d'une montre. Donc, d'abord les indices supérieurs lisant vers la droite, puis les indices droits lisant vers le bas, puis les indices inférieurs lisant vers la gauche, les indices gauches lisant vers le haut.
Ce serait 23145 34321 12222 33212
pour l'exemple précédent
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
Tout comme pour l'entrée, vous pouvez utiliser une liste, une chaîne ou toute structure ordonnée. Les quatre "groupes" peuvent être séparés ou non, dans une structure imbriquée ou plate. Mais, le format doit être le même pour chaque groupe.
Exemples de cas de test:
(Votre format d'entrée / sortie ne doit pas nécessairement être le même que ceux-ci.)
>> [[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]
Pour votre commodité, voici les mêmes cas de test dans un format de chaîne plate.
>> 1221
21
12
21
12
>> 312231123
122
221
123
321
>> 4352154132152432135432415
23145
34321
12222
33212
>> 264137589729683145597461823618572934153926478375248691831794256942815367486359712
422333321
133222233
432123322
312433225
≢¨∪¨↓⌈\(⍉⍪⌽⍪⍉∘⌽∘⊖⍪⊖)