Esta pregunta se basa en el rompecabezas de colocación de números Towers (también conocido como Skyscrapers), que puedes jugar en línea . Su objetivo es tomar una solución al rompecabezas y determinar las pistas: el número de torres visibles a lo largo de cada fila y columna. Este es el código de golf, por lo que gana menos bytes.
Cómo funcionan las torres
La solución a un rompecabezas Torres es un cuadrado latino - una n*n
cuadrícula en la que cada fila y columna contiene una permutación de los números 1
a través n
. Un ejemplo para n=5
es:
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
Cada fila y columna está etiquetada con una pista en cada extremo como:
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
Cada pista es un número de 1
a n
que te dice cuántas torres "ver" mirando a lo largo de la fila / columna de esa dirección, si los números son tratados como torres con esa altura. Cada torre bloquea torres más cortas detrás de ella. En otras palabras, las torres que puedes ver son las que son más altas que cualquier torre antes que ellas.
Por ejemplo, veamos la primera fila.
2 > 4 3 5 2 1 < 3
Tiene una pista de 2
la izquierda porque puedes ver el 4
y el 5
. Los 4
bloques de la 3
de la vista y la 5
bloquea todo lo demás. Desde la derecha, se puede ver 3
torres: 1
, 2
, y 5
.
Requisitos del programa
Escriba un programa o función que tome en la cuadrícula de números y produzca o imprima las pistas, yendo en sentido horario desde la parte superior izquierda.
Entrada
Un n*n
cuadrado latino con 2<=n<=9
.
El formato es flexible. Puede usar cualquier estructura de datos que represente una cuadrícula o lista que contenga números o caracteres de dígitos. Es posible que necesite un separador entre las filas o ningún separador en absoluto. Algunas posibilidades son una lista, una lista de listas, una matriz, una cadena separada por tokens como
43521 54132 15243 21354 32415,
o una cadena sin espacios.
No te dan n
como parte de la entrada.
Salida
Devuelve o imprime las pistas comenzando desde la parte superior izquierda y en sentido horario. Entonces, primero las pistas superiores leen hacia la derecha, luego las pistas correctas leen hacia abajo, luego las pistas inferiores leen hacia la izquierda, las pistas izquierdas leen hacia arriba.
Esto sería 23145 34321 12222 33212
para el ejemplo anterior.
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
Al igual que para la entrada, puede usar una lista, cadena o cualquier estructura ordenada. Los cuatro "grupos" se pueden separar o no, en una estructura anidada o plana. Pero, el formato debe ser el mismo para cada grupo.
Ejemplos de casos de prueba:
(Su formato de entrada / salida no tiene que ser el mismo que estos).
>> [[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]
Para su conveniencia, estos son los mismos casos de prueba en un formato de cadena plana.
>> 1221
21
12
21
12
>> 312231123
122
221
123
321
>> 4352154132152432135432415
23145
34321
12222
33212
>> 264137589729683145597461823618572934153926478375248691831794256942815367486359712
422333321
133222233
432123322
312433225
≢¨∪¨↓⌈\(⍉⍪⌽⍪⍉∘⌽∘⊖⍪⊖)