En la siguiente figura, al rotar girando 90 grados en el sentido del reloj la matriz de la izquierda, obtenemos la de la derecha
1 2 3 7 4 1
4 5 6 8 5 2
7 8 9 9 6 3 |
1 2 3 7 4 1
4 5 6 8 5 2
7 8 9 9 6 3
Definir la función
rota :: Matrix Int -> Matrix Int |
rota :: Matrix Int -> Matrix Int
tal que (rota p) es la matriz obtenida girando en el sentido del reloj la matriz cuadrada p. Por ejemplo,
λ> rota (fromList 3 3 [1..9])
( 7 4 1 )
( 8 5 2 )
( 9 6 3 )
λ> rota (fromList 3 3 [7,4,1,8,5,2,9,6,3])
( 9 8 7 )
( 6 5 4 )
( 3 2 1 ) |
λ> rota (fromList 3 3 [1..9])
( 7 4 1 )
( 8 5 2 )
( 9 6 3 )
λ> rota (fromList 3 3 [7,4,1,8,5,2,9,6,3])
( 9 8 7 )
( 6 5 4 )
( 3 2 1 )
Soluciones
import Data.Matrix
rota :: Matrix Int -> Matrix Int
rota p = matrix n m (\(i,j) -> p ! (n+1-j,i))
where m = nrows p
n = ncols p |
import Data.Matrix
rota :: Matrix Int -> Matrix Int
rota p = matrix n m (\(i,j) -> p ! (n+1-j,i))
where m = nrows p
n = ncols p
Se puede imprimir o compartir con
Version en Maxima hecha con la traducción a listas y la conversión a matriz
La comprobación sería
Definición alternativa a la de fracruzam en Maxima: