Advertisement
Guest User

Untitled

a guest
Apr 8th, 2014
640
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import System.IO
  2. import System.Random
  3. import Data.List
  4. import Data.Int
  5. import Data.Bits
  6. import Control.Monad
  7.  
  8. makeMask p g = numMask 50 g
  9.     where
  10.     numMask :: Int -> StdGen -> [Int64]
  11.     numMask 0 _ = []
  12.     numMask i g = let (elem, ng) = singleMask p g in elem `seq` ng `seq` elem : numMask (i-1) ng
  13.  
  14. singleMask :: Int -> StdGen -> (Int64,StdGen)
  15. singleMask p g = foldl' (\(a,g) i -> let (c,ng) = g `seq` randomR (1,10000) g
  16.                                     in c `seq` ng `seq` (if c <= p then setBit a i else a , ng) )
  17.                        (0,g)
  18.                        [1..39]
  19. main :: IO ()
  20. main = replicateM_ 10000 $! do g <- newStdGen; print $ makeMask 10 g
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement