>>847
1.6GHz Core i5 で12秒


{-# LANGUAGE BangPatterns #-}
import Control.Applicative
import Control.Monad
import Data.Maybe
import Data.Ord
import Data.List
import Data.MultiSet as S
import System.Random.Mersenne

cardNum = 10
iterateNum = 1000000
completeSet = fromList [0..cardNum-1]

main = do
  s <- replicate iterateNum <$> newMTGen Nothing >>=
       foldM (\(!s) g -> flip S.insert s <$>
         S.size . fromJust . find (completeSet `isSubsetOf`) .
           scanl (\x n -> S.insert (n `mod` cardNum) x) S.empty <$>
         (randoms g :: IO [Int])) S.empty
  print $ (findMin s, findMax s, maximumBy (comparing snd) $ toAscOccurList s)