summaryrefslogtreecommitdiff
path: root/h27.hs
blob: 8c0dab12ab955a6effad1cdcba4651830efaa6f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
import Control.Arrow
combination :: Int -> [a] -> [([a],[a])]                                                                                                  
combination 0 xs = [([],xs)]
combination _ [] = []                                                                                                               
combination c (x:xs) = (map ((x:).fst &&& snd) (combination (c-1) xs)) ++ (map (fst &&& (x:).snd) (combination c xs))

group :: [Int] -> [a] -> [[[a]]]
group [] _ = [[]]
-- group [n] xs = map ((:[]).fst) (combination n xs)
group (n:ns) xs = concatMap (\(comb,rest) -> map (comb:) (group ns rest)) (combination n xs)

group' [] = const [[]]
group' (n:ns) = concatMap (uncurry $ (. group' ns) . map . (:)) . combination n