16 lines
456 B
Haskell
16 lines
456 B
Haskell
-- choose m out of n items, return tuple of chosen and the rest
|
|
choose aa _ 0 = [([], aa)]
|
|
choose aa@(a:as) n m
|
|
| n == m = [(aa, [])]
|
|
| otherwise = map (\(x,y) -> (a:x, y)) (choose as (n-1) (m-1)) ++
|
|
map (\(x,y) -> (x, a:y)) (choose as (n-1) m)
|
|
|
|
partitions x = combos [1..n] n x where
|
|
n = sum x
|
|
combos _ _ [] = [[]]
|
|
combos s n (x:xs) = [ l : r | (l,rest) <- choose s n x,
|
|
r <- combos rest (n - x) xs]
|
|
|
|
|
|
main = mapM_ print $ partitions [5,5,5]
|