1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| let tableau i =
let t = make_vect 4 0 in
let n = (Random__int 3) in t.(n)<-1;
t.(3)<-i;
t;;
(*ce tableau représente mes 3 enveloppes, la 4eme case n'étant qu'une indexation*)
let exp i =
let t = make_vect i [|0|] in
for i=0 to (i-1) do
t.(i)<- tableau i; done;
t;;
(*ce tableau de tableau nous servira dans la suite pour effectuer une expérience à grande échelle*)
let choix1 i = random__int 3;;
(*comme son nom l'indique, voilà notre premier choix*)
let choix2 i =
let g = tableau i in
let k = choix1 i in
let rec aux j =
match (j=k,g.(j)=0) with
|(true,_)-> aux (j+1)
|(false,false) -> aux (j+1)
|(false, true) -> j
in
let rec aux2 m =
match (m=aux 0, m=k) with
|(true,_) -> aux2 (m+1)
|(_,true) -> aux2 (m+1)
|(false,false) -> m
in aux2 0;;
(* la fonction "aux" sert à repérer une enveloppe vide pour pouvoir l'enlever, la fonction "aux2" sert à changer notre 1er choix, comme dans l'énoncé de l'énigme *)
let proba p =
let t = exp p in
let a = ref 0 in
for d=0 to p-1 do
if t.(d).(choix2 d)=1 then a:= !a+1;
done;
!a;;
(* "proba" nous sert à compter le nombre de fois que fois que l'on gagne si l'on effectue p expérience *)
proba 1000;; |
Partager