Aquest exercici explora la generació exhaustiva de subconjunts.
Feu una funció zerosNones1 :: Int -> [[Int]] que,
donat un
,
retorni totes les combinacions de
zeros i
uns tals que
.
Feu una funció
zerosNones2 :: Int -> Int -> [[Int]] que, donats
i
,
retorni totes les combinacions de
zeros i
uns.
Feu una funció subsets1 :: [a] -> [[a]] que,
donats
elements, retorni una llista amb tots els subconjunts que es poden
formar amb els elements.
Feu una funció subsets2 :: Int -> [a] -> [[a]]
que, donats un nombre
i
elements, escrigui tots els subconjunts de
elements que es poden formar amb els
elements.
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 25 punts.
Input
let msort xs = sort (map sort xs) sort $ zerosNones1 3 sort $ zerosNones2 5 2 msort $ subsets1 ["hola", "adeu", "hi"] msort $ subsets1 [1..2] msort $ subsets2 2 ["hola", "adeu", "hi", "hello", "bye"]
Output
[[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]] [[0,0,0,1,1],[0,0,1,0,1],[0,0,1,1,0],[0,1,0,0,1],[0,1,0,1,0],[0,1,1,0,0],[1,0,0,0,1],[1,0,0,1,0],[1,0,1,0,0],[1,1,0,0,0]] [[],["adeu"],["adeu","hi"],["adeu","hi","hola"],["adeu","hola"],["hi"],["hi","hola"],["hola"]] [[],[1],[1,2],[2]] [["adeu","bye"],["adeu","hello"],["adeu","hi"],["adeu","hola"],["bye","hello"],["bye","hi"],["bye","hola"],["hello","hi"],["hello","hola"],["hi","hola"]]