Ampliación de una matriz sumando sus filas
Representamos las matrices mediante el tipo de dato
1 |
type Matriz a = Array (Int,Int) a |
Por ejemplo,
1 2 |
ejM :: Matriz Int ejM = listArray ((1,1),(2,4)) [1,2,3,0,4,5,6,7] |
representa la matriz
1 2 |
|1 2 3 0| |4 5 6 7| |
Definir la función
1 |
ampliada :: Num a => Matriz a -> Matriz a |
tal que (ampliada p) es la matriz obtenida al añadir una nueva fila a p cuyo elemento i-ésimo es la suma de la columna i-ésima de p. Por ejemplo,
1 2 3 |
|1 2 3 0| |1 2 3 0| |4 5 6 7| ==> |4 5 6 7| |5 7 9 7| |
En Haskell,
1 2 3 4 |
ghci> ampliada ejM array ((1,1),(3,4)) [((1,1),1),((1,2),2),((1,3),3),((1,4),0), ((2,1),4),((2,2),5),((2,3),6),((2,4),7), ((3,1),5),((3,2),7),((3,3),9),((3,4),7)] |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import Data.Array type Matriz a = Array (Int,Int) a ejM :: Matriz Int ejM = listArray ((1,1),(2,4)) [1,2,3,0,4,5,6,7] ampliada :: Num a => Matriz a -> Matriz a ampliada p = array ((1,1),(m+1,n)) [((i,j),f i j) | i <- [1..m+1], j <- [1..n]] where (_,(m,n)) = bounds p f i j | i <= m = p!(i,j) | otherwise = sum [p!(i,j) | i <- [1..m]] |