組み合わせの数3
com n k = (map length $ group $ sort $ map sort $ pow n ["a","b"]) !! k where mul as bs = concat $ map (\x -> map(++ x) as) bs pow 1 xs = xs pow n xs = mul xs (pow (n-1) xs)
組み合わせを実際に作って、数を数えて、二項係数配列を作って、!!で取り出すバージョン。
mul ["a","b","e"] ["c","d"] == ["ac","bc","ec","ad","bd","ed"] pow 5 ["a","b"] == ["aaaaa","baaaa","abaaa","bbaaa","aabaa", "babaa","abbaa","bbbaa","aaaba","baaba", "ababa","bbaba","aabba","babba","abbba", "bbbba","aaaab","baaab","abaab","bbaab", "aabab","babab","abbab","bbbab","aaabb", "baabb","ababb","bbabb","aabbb","babbb", "abbbb","bbbbb"] com 6 3 == [1,6,15,20,15,6,1] !! 3 == 20