]> Git — Sourcephile - reloto.git/blob - Htirage/Draw.hs
Add tar GNUmakefile target.
[reloto.git] / Htirage / Draw.hs
1 -- | Tirages.
2 module Htirage.Draw where
3
4 import Htirage.Bits
5 import Htirage.Combin
6
7 -- | @draw1 xs bs@ retourne un choix parmi 'xs' déterminé par l’entropie 'bs'.
8 draw1 :: [a] -> [Bool] -> a
9 draw1 xs bs = xs !! fromInteger (randomIntegerOfBits (toInteger (length xs - 1)) bs)
10
11 -- | @drawMany xs k bs@ retourne 'k' choix (sans répétition) parmi 'xs'
12 -- déterminés par l’entropie 'bs'.
13 drawMany :: [a] -> Integer -> [Bool] -> [a]
14 drawMany xs k bs = (fromInteger <$> combinOfRank n k r) `permute` xs
15 where n = toInteger (length xs)
16 r = randomIntegerOfBits ((n`nCk`k) - 1) bs