Matrices centro simétricas
Una matriz centro simétrica es una matriz cuadrada que es simétrica respecto de su centro. Por ejemplo, de las siguientes matrices, las dos primeras son simétricas y las otras no lo son
1 2 3 |
(1 2) (1 2 3) (1 2 3) (1 2 3) (2 1) (4 5 4) (4 5 4) (4 5 4) (3 2 1) (3 2 2) |
Definir la función
1 |
esCentroSimetrica :: Eq t => Array (Int,Int) t -> Bool |
tal que (esCentroSimetrica a) se verifica si la matriz a es centro simétrica. Por ejemplo,
1 2 3 4 5 6 7 8 |
λ> esCentroSimetrica (listArray ((1,1),(2,2)) [1,2, 2,1]) True λ> esCentroSimetrica (listArray ((1,1),(3,3)) [1,2,3, 4,5,4, 3,2,1]) True λ> esCentroSimetrica (listArray ((1,1),(3,3)) [1,2,3, 4,5,4, 3,2,2]) False λ> esCentroSimetrica (listArray ((1,1),(2,3)) [1,2,3, 4,5,4]) False |
Soluciones
1 2 3 4 5 6 |
import Data.Array esCentroSimetrica :: Eq t => Array (Int,Int) t -> Bool esCentroSimetrica a = n == m && and [a!(i,j) == a!(n-i+1,n-j+1) | i <- [1..n], j <- [i..n]] where (_,(n,m)) = bounds a |