tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
13
Task/Ordered-Partitions/Haskell/ordered-partitions-1.hs
Normal file
13
Task/Ordered-Partitions/Haskell/ordered-partitions-1.hs
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
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]
|
||||
12
Task/Ordered-Partitions/Haskell/ordered-partitions-2.hs
Normal file
12
Task/Ordered-Partitions/Haskell/ordered-partitions-2.hs
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
comb :: Int -> [a] -> [([a],[a])]
|
||||
comb 0 xs = [([],xs)]
|
||||
comb _ [] = []
|
||||
comb k (x:xs) = [ (x:cs,zs) | (cs,zs) <- comb (k-1) xs ] ++
|
||||
[ (cs,x:zs) | (cs,zs) <- comb k xs ]
|
||||
|
||||
partitions :: [Int] -> [[[Int]]]
|
||||
partitions xs = p [1..sum xs] xs
|
||||
where p _ [] = [[]]
|
||||
p xs (k:ks) = [ cs:rs | (cs,zs) <- comb k xs, rs <- p zs ks ]
|
||||
|
||||
main = print $ partitions [2,0,2]
|
||||
15
Task/Ordered-Partitions/Haskell/ordered-partitions-3.hs
Normal file
15
Task/Ordered-Partitions/Haskell/ordered-partitions-3.hs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
-- 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]
|
||||
Loading…
Add table
Add a link
Reference in a new issue