import qualified Data.IntMap as I import System.Random main :: IO () main = do rd <- fmap (take 100000) rollIkasamaDice let im = foldr (I.update ((Just $!) . succ)) im0 rd im0 = I.fromList $ zip [1..4] [0,0..] print im rollIkasamaDice :: IO [Int] rollIkasamaDice = do gen <- getStdGen let rs = filter (/=0) $ map f $ randomRs (1, 16) gen f x | x > 4 = floor $ sqrt $ fromIntegral x | otherwise = x return rs