summaryrefslogtreecommitdiff
path: root/H27.hs
diff options
context:
space:
mode:
Diffstat (limited to 'H27.hs')
-rw-r--r--H27.hs13
1 files changed, 13 insertions, 0 deletions
diff --git a/H27.hs b/H27.hs
new file mode 100644
index 0000000..8c0dab1
--- /dev/null
+++ b/H27.hs
@@ -0,0 +1,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