Feu una funció
sumEquals1 :: Int -> [Int] -> [[Int]] que, donat un
enter
i una llista d’enters xs, retorni totes les subllistes de
xs que sumen
.
Feu una funció
sumEquals2 :: Int -> [Int] -> Maybe [Int] que, donat
un enter
i una llista d’enters xs, retorni (possiblement) el
subconjunt (amb repetits o no, però usant cada element de
xs com a molt un cop) més gran (en ordre lexicogràfic) dels
que tinguin suma
amb els elements ordenats no creixentment.
Feu una funció
sumEquals3 :: Int -> [Int] -> [[Int]] que, donat un
natural
i una llista de naturals xs, retorni totes les subllistes
de xs que sumen
.
Per aquesta funció, un algorisme molt simple pot ser massa
lent.
Per tal que no importi l’ordre en que genereu la solució, els jocs de
proves ordenen el resultat. Per a això, importeu la funció
sort del mòdul Data.List encara que no la feu
servir.
Cada funció puntua 33 punts. L’exemple puntua 1 punt.
Input
sort $ sumEquals1 6 [1,(-2),0,3,(-4),5,1] sort $ sumEquals1 0 [(-5),5] sumEquals2 6 [1,6,0,1,3,2,0] sumEquals2 (-5) [6,(-10),4] sort $ sumEquals3 6 [1,6,0,1,3,0,2] sort $ sumEquals3 10 [1,1,1,1,1,1,1,1,1,1]
Output
[[-2,0,3,5],[-2,3,5],[0,5,1],[1,0,3,-4,5,1],[1,0,5],[1,3,-4,5,1],[1,5],[5,1]] [[],[-5,5]] Just [6,0,0] Nothing [[0,1,3,0,2],[0,1,3,2],[1,0,3,0,2],[1,0,3,2],[1,3,0,2],[1,3,0,2],[1,3,2],[1,3,2],[6],[6,0],[6,0],[6,0,0]] [[1,1,1,1,1,1,1,1,1,1]]