20 lines
591 B
Haskell
20 lines
591 B
Haskell
import Control.Monad (replicateM)
|
|
import System.Random (randomRIO)
|
|
import Data.Bool (bool)
|
|
import Data.List (sort)
|
|
|
|
character :: IO [Int]
|
|
character =
|
|
discardUntil
|
|
(((&&) . (75 <) . sum) <*> ((2 <=) . length . filter (15 <=)))
|
|
(replicateM 6 $ sum . tail . sort <$> replicateM 4 (randomRIO (1, 6 :: Int)))
|
|
|
|
discardUntil :: ([Int] -> Bool) -> IO [Int] -> IO [Int]
|
|
discardUntil p throw = go
|
|
where
|
|
go = throw >>= (<*>) (bool go . return) p
|
|
|
|
-------------------------- TEST ---------------------------
|
|
main :: IO ()
|
|
main = replicateM 10 character >>= mapM_ (print . (sum >>= (,)))
|