Fix combination bug
This commit is contained in:
@@ -1,13 +1,18 @@
|
||||
{-# LANGUAGE TupleSections #-}
|
||||
module Multiset where
|
||||
import qualified Data.Map.Strict as M
|
||||
import qualified Data.IntMap.Strict as IM
|
||||
import qualified Data.IntSet as IS
|
||||
import Control.Monad
|
||||
import Data.List (subsequences)
|
||||
|
||||
powlistN :: Int -> [a] ->[[a]]
|
||||
powlistN _ [] = [[]]
|
||||
powlistN n (x:xs)
|
||||
| n <=0 = [[]]
|
||||
| otherwise = ((x:) <$> powlistN (n-1) xs) ++ powlistN n xs
|
||||
powlistN' :: Int -> [a] ->[[a]]
|
||||
powlistN' k = filter ( ( k >= ) . length ) . subsequences
|
||||
|
||||
-- exponential, so don't use it on long lists
|
||||
powlist :: [a] -> [[a]]
|
||||
@@ -15,3 +20,8 @@ powlist = filterM (const [True,False])
|
||||
|
||||
toMultiset :: Ord a => [a] -> M.Map a Int
|
||||
toMultiset = foldr (uncurry (M.insertWith (+)) . (, 1)) M.empty
|
||||
|
||||
invertIntMap :: Ord a => IM.IntMap a -> M.Map a IS.IntSet
|
||||
invertIntMap = IM.foldrWithKey
|
||||
(\k x -> M.insertWith IS.union x (IS.singleton k))
|
||||
M.empty
|
||||
|
||||
Reference in New Issue
Block a user