игра идет с тремя зарами
понтеры ставят, после чего банкомет бросает кости
если сумма меньше чем 11 тогда банкомет забирает все ставки понтеров
если сумма равна или больше 11 тогда банкомет выплачивает понтерам в пропорции 1:1
листинг Haskell :
dice :: [Int] dice = [1..6] average :: Double average = let n = sum $ dice >>= \ x -> dice >>= \ y -> dice >>= \ z -> return $ x + y + z in (fromInteger n) / 216 below11 :: Double below11 = let n = length $ dice >>= \ x -> dice >>= \ y -> dice >>= \ z -> guard ( (x + y + z) < 11 ) >> return 1 in (fromIntegral n) / 216.0
и теперь в repl :
λ> average 10.5 λ> below11 0.5