21 lines
547 B
Haskell
21 lines
547 B
Haskell
import Data.Monoid (Sum(..))
|
|
import System.Random (randomIO)
|
|
import Control.Monad (replicateM)
|
|
import Data.Bool (bool)
|
|
|
|
data Toss = Heads | Tails deriving Show
|
|
|
|
anExperiment toss =
|
|
moreWakenings <>
|
|
case toss of
|
|
Heads -> headsOnWaking
|
|
Tails -> moreWakenings
|
|
where
|
|
moreWakenings = (1,0)
|
|
headsOnWaking = (0,1)
|
|
|
|
main = do
|
|
tosses <- map (bool Heads Tails) <$> replicateM 1000000 randomIO
|
|
let (Sum w, Sum h) = foldMap anExperiment tosses
|
|
let ratio = fromIntegral h / fromIntegral w
|
|
putStrLn $ "Ratio: " ++ show ratio
|