« Mathématiques avec Python et Ruby/Nombres pseudo-aléatoires en Ruby » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 100 :
univers=[]
valeurs.collect{|v| couleurs.collect{|c| univers.push(v+' '+c)}}
 
carres=0
10000.times do
Ligne 109 :
hand.push(carte)
end
if (hand.select {|c| c[0..1]=='1 '}).size==4
carres+=1
end
end
 
puts(carres.to_f/10000)
</source>
 
On construit une liste avec les cartes de ''hand'' dont le nom commence par un ''1'' suivi d'un espace (les as), et lorsque la longueur de cette liste est égale à 4, on incrémente le compteur ''carres''. À la fin de l'exécution du script, on a donc le nombre de carrés d'as parmi les 10 000 tirages, et en le divisant par 10 000, on a la fréquence de ces carrés d'as. Elle est très faible !
 
==Mélanger un jeu de cartes==
 
Pour mélanger un jeu de cartes, on peut construire une main de 32 cartes ! Ensuite on peut répéter l'expérience 1900 fois, et compter combien de fois il y a eu au moins une rencontre (le nombre de rencontres strictement positif), et enfin, par division par 1900, estimer la fréquence de ces rencontres, et la comparer avec le quotient de 12 par 19 donné par [[w:Euler|Euler]]:
 
<source lang="ruby">
valeurs=[1,7,8,9,10,'Valet','Dame','Roi']
valeurs=valeurs.collect { |v| v.to_s}
couleurs=['carreau','coeur','pique','trèfle']
univers=[]
valeurs.collect{|v| couleurs.collect{|c| univers.push(v+' '+c)}}
gains=0
1900.times do
hand=[]
while hand.size<32
jeu=univers-hand
carte=jeu[rand(jeu.size)]
hand.push(carte)
end
rencontres=((0..31).to_a).select { |i| hand[i]==univers[i] }
if rencontres.size>0
gains+=1
end
end
puts(gains.to_f/1900)
puts(12.0/19)
</source>
 
Un exemple de résultat sur 1900 jeux:
 
<code>
0.634736842105263
0.631578947368421
</code>
 
[[Catégorie:Informatique]]