-- | Extractions d’entropie publique. -- -- NOTE: Afin de ne produire que des bits -- qui ont chacun une probabilité d’un sur deux d’être à 'True' ou à 'False', -- les fonctions de ce module n’extraient que les bits -- des combinaisons de rang lexicographique inférieur ou égal -- à la plus grande puissance de 2 inférieure ou égale -- au nombre de combinaisons possibles. -- Car il n’y a que @2^n@ combinaisons de @n@ bits. -- Et que parmi ces combinaisons un bit -- a une probabilité de @2^(n-1)@ sur @2^n@ soit de @1/2@ d’être à 'True', -- et autant d’être à 'False'. module Htirage.Entropy where import Htirage.Bits -- | @bitsOfLOTO nums numComplementaire@ retourne les bits équiprobables donnés -- par un tirage du . -- -- Il peut produire @23@ bits équiprobables : -- @'sum' $ 'equiprobableBits' '<$>' [49\`nCk\`5, 10\`nCk\`1 ::Int]@ bitsOfLOTO :: (Int,Int,Int,Int,Int) -> Int -> [Bool] bitsOfLOTO (n1,n2,n3,n4,n5) nc = bitsOfComb 49 5 [n1,n2,n3,n4,n5] ++ bitsOfComb 10 1 [nc] -- | @bitsOfSwissLOTO nums numComplementaire@ retourne les bits équiprobables donnés -- par un tirage du . -- -- Il peut produire @24@ bits équiprobables : -- @'sum' $ 'equiprobableBits' '<$>' [42\`nCk\`6, 6\`nCk\`1 ::Int]@ bitsOfSwissLOTO :: (Int,Int,Int,Int,Int,Int) -> Int -> [Bool] bitsOfSwissLOTO (n1,n2,n3,n4,n5,n6) nc = bitsOfComb 42 6 [n1,n2,n3,n4,n5,n6] ++ bitsOfComb 6 1 [nc] -- | @bitsOfSwissLOTO nums numComplementaires@ retourne les bits équiprobables donnés -- par un tirage de l’. -- -- Il peut produire @26@ bits équiprobables : -- @'sum' $ 'equiprobableBits' '<$>' [50\`nCk\`5, 11\`nCk\`2 ::Int]@ bitsOfEuroMillions :: (Int,Int,Int,Int,Int) -> (Int,Int) -> [Bool] bitsOfEuroMillions (n1,n2,n3,n4,n5) (nc1,nc2) = bitsOfComb 50 5 [n1,n2,n3,n4,n5] ++ bitsOfComb 11 2 [nc1,nc2] -- | @bitsOf6aus49 nums numComplementaire@ retourne les bits équiprobables donnés -- par un tirage du . -- -- Il peut produire @26@ bits équiprobables : -- @'sum' $ 'equiprobableBits' '<$>' [49\`nCk\`6, 10\`nCk\`1 ::Int]@ bitsOf6aus49 :: (Int,Int,Int,Int,Int,Int) -> Int -> [Bool] bitsOf6aus49 (n1,n2,n3,n4,n5,n6) nc = bitsOfComb 49 6 [n1,n2,n3,n4,n5,n6] ++ bitsOfComb 10 1 [nc]