14 lines
353 B
Haskell
14 lines
353 B
Haskell
import Data.List ((\\))
|
|
|
|
comb :: Int -> [a] -> [[a]]
|
|
comb 0 _ = [[]]
|
|
comb _ [] = []
|
|
comb k (x:xs) = map (x:) (comb (k-1) xs) ++ comb k xs
|
|
|
|
partitions :: [Int] -> [[[Int]]]
|
|
partitions xs = p [1..sum xs] xs
|
|
where p _ [] = [[]]
|
|
p xs (k:ks) = [ cs:rs | cs <- comb k xs, rs <- p (xs \\ cs) ks ]
|
|
|
|
main = print $ partitions [2,0,2]
|