Tutoriel de htirage
===================

On commence par les entêtes nécessaires au compilateur :

> {-# OPTIONS_GHC -fno-warn-missing-signatures #-}
> module Reloto.Tutorial where
> import Reloto
> import Prelude (toInteger)
> import Data.List ((++), length, sort)


2 parmi 5
---------

Pour sélectionner 2 choix parmi 5 (ordonnés lexicographiquement) :

> x0 :: [[Char]]
x0 = [[Char]] -> [[Char]]
forall a. Ord a => [a] -> [a]
sort [[Char]
"dominique", [Char]
"claude", [Char]
"baya", [Char]
"zhennan", [Char]
"camille"]
> n0 :: Int
n0 = [[Char]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Char]]
x0
> k0 :: Integer
k0 = Integer
2

Il faut au moins c0 == 3 bits équiprobables :

> c0 :: Int
c0 = Integer -> Int
equiprobableBits (Int -> Integer
forall a. Integral a => a -> Integer
toInteger Int
n0Integer -> Integer -> Integer
forall i. Integral i => i -> i -> i
`nCk`Integer
k0)

Ce tirage de lotterie en procure length b0 == 23:

> b0 :: [Bool]
b0 = (Integer, Integer, Integer, Integer, Integer, Integer)
-> Integer -> [Bool]
randomOf6aus49 (Integer
39,Integer
2,Integer
19,Integer
41,Integer
6,Integer
30) Integer
9

Et on obtient s0 == ["baya","claude"] :

> s0 :: [[Char]]
s0 = Integer -> [[Char]] -> [Bool] -> [[Char]]
forall a. Integer -> [a] -> [Bool] -> [a]
unorderedDraw Integer
k0 [[Char]]
x0 [Bool]
b0



42 parmi 100
------------

Pour sélectionner 42 choix parmi 100 :

> n1 :: Integer
n1 = Integer
100
> k1 :: Integer
k1 = Integer
42

Il faut au moins c1 == 94 bits équiprobables :

> c1 :: Int
c1 = Integer -> Int
equiprobableBits (Integer
n1Integer -> Integer -> Integer
forall i. Integral i => i -> i -> i
`nCk`Integer
k1)

Ces quatres tirages de lotterie en procurent length b1 == 97 :

> b1 :: [Bool]
b1 = (Integer, Integer, Integer, Integer, Integer, Integer)
-> Integer -> [Bool]
randomOf6aus49 (Integer
27,Integer
2,Integer
12,Integer
34,Integer
22,Integer
19) Integer
1 [Bool] -> [Bool] -> [Bool]
forall a. [a] -> [a] -> [a]
++
>      (Integer, Integer, Integer, Integer, Integer)
-> (Integer, Integer) -> [Bool]
randomOfEuroMillions (Integer
5,Integer
14,Integer
35,Integer
16,Integer
10) (Integer
2,Integer
7) [Bool] -> [Bool] -> [Bool]
forall a. [a] -> [a] -> [a]
++
>      (Integer, Integer, Integer, Integer, Integer) -> Integer -> [Bool]
randomOfFrenchLoto (Integer
14,Integer
8,Integer
26,Integer
3,Integer
24) Integer
2 [Bool] -> [Bool] -> [Bool]
forall a. [a] -> [a] -> [a]
++
>      (Integer, Integer, Integer, Integer, Integer, Integer)
-> Integer -> [Bool]
randomOfSwissLoto (Integer
17,Integer
2,Integer
29,Integer
37,Integer
30,Integer
25) Integer
5

Et on obtient s1 == [1,8,9,10,11,12,17,19,20,21,25,26,28,32,35,37,46,50
                    ,51,52,54,55,57,60,61,63,65,66,67,69,70,73,74,75,78
                    ,80,83,87,89,90,92,97]

> s1 :: [Integer]
s1 = Integer -> [Integer] -> [Bool] -> [Integer]
forall a. Integer -> [a] -> [Bool] -> [a]
unorderedDraw Integer
k1 [Integer
1..Integer
n1] [Bool]
b1