Diagonales secundarias de una matriz
Definir la función
diagonalesSecundarias :: Matriz a -> [[a]]
tal que (diagonalesSecundarias p) es la lista de las diagonales secundarias de p. Por ejemplo, para la matriz
1 2 3 4 5 6 7 8 9 10 11 12
la lista de sus diagonales secundarias es
[[1],[2,5],[3,6,9],[4,7,10],[8,11],[12]]
En Haskell,
λ> diagonalesSecundarias (listArray ((1,1),(3,4)) [1..12]) [[1],[2,5],[3,6,9],[4,7,10],[8,11],[12]]
Soluciones
import Data.Array type Matriz a = Array (Int,Int) a diagonalesSecundarias :: Matriz a -> [[a]] diagonalesSecundarias p = [[p!ij1 | ij1 <- extension ij] | ij <- iniciales] where (_,(m,n)) = bounds p iniciales = [(1,j) | j <- [1..n]] ++ [(i,n) | i <- [2..m]] extension (i,j) = [(i+k,j-k) | k <- [0..min (j-1) (m-i)]]