Definir la función
conSuma :: (Eq a, Num a) => [a] -> [[a]] -> [[[a]]] |
tal que (conSuma xs yss) es la lista de los vectores de xss cuya suma vectorial es xs. Por ejemplo,
ghci> conSuma [9,10,12] [[4,7,3],[3,1,4],[5,3,9],[2,2,5]] [[[4,7,3],[5,3,9]],[[4,7,3],[3,1,4],[2,2,5]]] ghci> conSuma [9,11,12] [[4,7,3],[3,1,4],[5,3,9],[2,2,5]] [] |
Soluciones
import Data.List (subsequences, transpose) conSuma :: (Eq a, Num a) => [a] -> [[a]] -> [[[a]]] conSuma xs yss = [zss | zss <- subsequences yss, suma zss == xs] -- (suma xss) es la suma de las listas xs. Por ejemplo, -- suma [[4,7,3],[3,1,4],[2,2,5]] == [9,10,12] suma :: Num a => [[a]] -> [a] suma = map sum . transpose |
Una solución de “Listas con suma dada”