]> Git — Sourcephile - reloto.git/blob - Htirage/Entropy.hs
Use ranking/unranking algorithms.
[reloto.git] / Htirage / Entropy.hs
1 -- | Extractions d’entropie publique.
2 --
3 -- NOTE: Afin de ne produire que des bits
4 -- qui ont chacun une probabilité d’un sur deux d’être à 'True' ou à 'False',
5 -- les fonctions de ce module n’extraient que les bits
6 -- des combinaisons de rang lexicographique inférieur ou égal
7 -- à la plus grande puissance de 2 inférieure ou égale
8 -- au nombre de combinaisons possibles.
9 -- Car il n’y a que @2^n@ combinaisons de @n@ bits.
10 -- Et que parmi ces combinaisons un bit
11 -- a une probabilité de @2^(n-1)@ sur @2^n@ soit de @1/2@ d’être à 'True',
12 -- et autant d’être à 'False'.
13 module Htirage.Entropy where
14
15 import Htirage.Bits
16
17 -- | @bitsOfLOTO nums numComplementaire@ retourne les bits équiprobables donnés
18 -- par un tirage du <https://www.fdj.fr/jeux/jeux-de-tirage/loto/resultats/ LOTO Français>.
19 --
20 -- Il peut produire @23@ bits équiprobables :
21 -- @'sum' $ 'equiprobableBits' '<$>' [49\`nCk\`5, 10\`nCk\`1 ::Int]@
22 bitsOfLOTO :: (Int,Int,Int,Int,Int) -> Int -> [Bool]
23 bitsOfLOTO (n1,n2,n3,n4,n5) nc =
24 bitsOfComb 49 5 [n1,n2,n3,n4,n5] ++
25 bitsOfComb 10 1 [nc]
26
27 -- | @bitsOfSwissLOTO nums numComplementaire@ retourne les bits équiprobables donnés
28 -- par un tirage du <https://jeux.loro.ch/FR/1/SwissLoto#action=game-history SwissLOTO>.
29 --
30 -- Il peut produire @24@ bits équiprobables :
31 -- @'sum' $ 'equiprobableBits' '<$>' [42\`nCk\`6, 6\`nCk\`1 ::Int]@
32 bitsOfSwissLOTO :: (Int,Int,Int,Int,Int,Int) -> Int -> [Bool]
33 bitsOfSwissLOTO (n1,n2,n3,n4,n5,n6) nc =
34 bitsOfComb 42 6 [n1,n2,n3,n4,n5,n6] ++
35 bitsOfComb 6 1 [nc]
36
37 -- | @bitsOfSwissLOTO nums numComplementaires@ retourne les bits équiprobables donnés
38 -- par un tirage de l’<https://www.fdj.fr/jeux/jeux-de-tirage/euromillions/resultats EuroMillions>.
39 --
40 -- Il peut produire @26@ bits équiprobables :
41 -- @'sum' $ 'equiprobableBits' '<$>' [50\`nCk\`5, 11\`nCk\`2 ::Int]@
42 bitsOfEuroMillions :: (Int,Int,Int,Int,Int) -> (Int,Int) -> [Bool]
43 bitsOfEuroMillions (n1,n2,n3,n4,n5) (nc1,nc2) =
44 bitsOfComb 50 5 [n1,n2,n3,n4,n5] ++
45 bitsOfComb 11 2 [nc1,nc2]
46
47 -- | @bitsOf6aus49 nums numComplementaire@ retourne les bits équiprobables donnés
48 -- par un tirage du <https://www.lotto.de/de/ergebnisse/lotto-6aus49/archiv.html 6aus49>.
49 --
50 -- Il peut produire @26@ bits équiprobables :
51 -- @'sum' $ 'equiprobableBits' '<$>' [49\`nCk\`6, 10\`nCk\`1 ::Int]@
52 bitsOf6aus49 :: (Int,Int,Int,Int,Int,Int) -> Int -> [Bool]
53 bitsOf6aus49 (n1,n2,n3,n4,n5,n6) nc =
54 bitsOfComb 49 6 [n1,n2,n3,n4,n5,n6] ++
55 bitsOfComb 10 1 [nc]