fork download
  1. subsequencesOfSize :: Int -> [a] -> [[a]]
  2. subsequencesOfSize n xs = let l = length xs
  3. in if n>l then [] else subsequencesBySize xs !! (l-n)
  4. where
  5. subsequencesBySize [] = [[[]]]
  6. subsequencesBySize (x:xs) = let next = subsequencesBySize xs
  7. in zipWith (++) ([]:next) (map (map (x:)) next ++ [[]])
  8.  
  9. main = do
  10. print $ length $ subsequencesOfSize 3 [1..350]
  11. print $ length $ subsequencesOfSize 147 [1..150]
Success #stdin #stdout 11.12s 9336KB
stdin
Standard input is empty
stdout
7084700
551300