Rotación de una matriz
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 |
1 2 3 7 4 1 4 5 6 8 5 2 7 8 9 9 6 3 |
Definir la función
1 |
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,
1 2 3 4 5 6 7 8 9 |
λ> 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
1 2 3 4 5 6 |
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 |
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: