Le 421 Contre l`ordinateur [it12] - Exercice

Transcription

Le 421 Contre l`ordinateur [it12] - Exercice
Le 421 Contre l’ordinateur [it12] - Exercice
Yvan Maillot, Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner
Unisciel
algoprog
Version 8 avril 2015
Table des matières
1 Le 421 Contre l’ordinateur / pg-ret421A1 (alg)
1.1 Analyse probabiliste du 421 . . . . . . . . . . . .
1.2 Modification du jeu . . . . . . . . . . . . . . . . .
1.3 Recherche du 421 . . . . . . . . . . . . . . . . . .
1.4 Recherche du Brelan . . . . . . . . . . . . . . . .
1.5 Recherche tierce . . . . . . . . . . . . . . . . . . .
1.6 Stratégie Préférence . . . . . . . . . . . . . . . . .
1.7 Jouer . . . . . . . . . . . . . . . . . . . . . . . . .
1.8 Stratégie ultime . . . . . . . . . . . . . . . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
4
5
6
7
9
10
Le 421 Contre l’ordinateur / pg-ret421A1 (alg)
Mots-Clés Schéma itératif, Algorithmique, Programmation, C++.
Requis Structures de base, Structures conditionnelles, Algorithmes paramétrés, Structures répétitives, Schéma itératif.
Cet exercice améliore le jeu du 421 pour permettre :
– A un joueur humain de jouer contre un autre joueur humain.
– A un joueur humain de jouer contre l’ordinateur.
– De tester différentes stratégies de jeu.
1.1
Analyse probabiliste du 421
Avant d’élaborer des stratégies de jeu, il convient de faire une petite analyse probabiliste
puis de vérifier les probabilités par programme.
Le nombre de permutations d’une combinaison abc est 6 (abc, acb, bac, bca, cab, cba),
et il y a 6*6*6=216 jets de dés possibles (111, 112, 113, ..., 666). Par conséquent :
– La probabilité d’obtenir un 421 est donc de 6/(6 × 6 × 6) = 1/36 ≈ 2.8%.
– Les différentes façons de faire un brelan sont : 111, 222, 333, 444, 555, 666. Il y en a
donc 6 aussi. La probabilité de faire un brelan est donc de 1/36 soit 2.8%.
1
Unisciel algoprog – Le 421 Contre l’ordinateur / it12
2
– Les tierces sont : 123, 234, 345, 456. Il y en a donc 4 × 6 = 24. La probabilité de faire
une tierce est de 24/216 = 1/9 soit 11,1%.
– Le reste : il y en a 216−6−6−24 = 180. La probabilité de ne faire aucune combinaison
est donc de 180/216 soit 83,3%.
Écrivez une procédure test_stats qui demande le nombre de lancers dans un entier
n puis lance n fois les trois dés. Comptabilisez le nombre de 421 réalisés dans n421, le
nombre de brelans dans nb, de tierces dans nt et le reste dans na. Enfin affichez les
résultats. Exemple d’exécution.
Nombre de
==> Proba
==> Proba
==> Proba
==> Proba
lancers?
421
:
brelan :
tierce :
rien
:
1000
2.9%
2.7%
10.8%
83.6%
Rappel
–
–
–
–
–
1.2
La
La
La
La
La
fonction jetDe() simule le lancer d’un dé.
procédure decroitre3i(a,b,c) ordonne trois entiers en décroissant.
fonction est421(a,b,c) renvoie Vrai si la combinaison (a,b,c) est un 421.
fonction brelan(a,b,c) renvoie Vrai si la combinaison (a,b,c) est un brelan.
fonction tierce(a,b,c) renvoie Vrai si la combinaison (a,b,c) est une tierce.
Modification du jeu
Vous allez maintenant modifier le programme du 421 pour offrir la possibilité de désigner
la « nature » de chacun des deux joueurs. Il peut être humain ou machine (avec différentes
stratégies de jeu pour la machine). Attention, veuillez écrire les procédures et fonctions
avant la procédure test_jeu puisque c’est la procédure finale du jeu.
Unisciel algoprog – Le 421 Contre l’ordinateur / it12
3
Écrivez une procédure saisirStrategie(st,n) qui affiche le menu ci-après puis qui
saisit le numéro de la stratégie du joueur n (entier) dans un entier st jusqu’à ce qu’il
soit valide, c.-à-d. compris dans [0..5] (Rappel : [x] désigne le contenu de x).
Strategie du joueur [n]
0 - Manuel
1 - Naif
2 - Recherche 421
3 - Recherche brelan
4 - Recherche tierce
5 - Strategie preference
Écrivez une procédure jouerTourNaif(nj,s) qui effectue un tour de jeu selon la stratégie
de jeu la plus simpliste : l’ordinateur se contente de lancer une seule fois les trois dés.
Autant dire qu’il n’y a aucune stratégie. A l’issu de l’unique lancer, la procédure doit
restituer le nombre de jetons dans nj (entier) et l’évaluation de la combinaison dans s
(entier).
Écrivez une procédure jouerTourST(nj,s,st) qui joue un tour selon la stratégie définie par st (entier) et restitue le nombre de jetons potentiellement gagnés dans nj et
l’évaluation de la combinaison réalisée dans s. Cette procédure se contente d’appeler la
bonne procédure selon st :
– Pour 0 (mode manuel) : c’est un appel à la procédure jouerTour(nj,s) que vous avez
déjà écrite.
– Pour 1 : c’est la stratégie naı̈ve définie ci-avant jouerTourNaif(nj,s).
– Et ainsi de suite pour chaque stratégie proposée lesquelles vous seront expliquées plus
loin. Vous les ajoutez alors dans cette procédure.
Modifiez la procédure test_jeu comme suit :
– Déclarez deux entiers st1 et st2 qui représentent le numéro de stratégie choisie par
chacun des joueurs.
– Saisissez la stratégie des deux joueurs.
Unisciel algoprog – Le 421 Contre l’ordinateur / it12
4
– Remplacez les deux instructions jouerTour(nj,s) en jouerTourST(nj,s,st) pour
chacun des joueurs.
1.3
Recherche du 421
Comme son nom l’indique, cette stratégie consiste à tout faire pour obtenir un 421 (en
respectant les règles du jeu). C’est une stratégie comme une autre.
Écrivez une procédure permuter2i(a,b) qui permute les contenus des entiers a et b.
Écrivez une procédure rejouerTour421(d1,d2,d3) qui relance un ou plusieurs dés afin
(de tenter) d’obtenir un 421. Avant l’appel, la combinaison définie par d1, d2 et d3 est
telle que d1>=d2>=d3 et elle n’est pas un 421.
Aide méthodologique
– Si d1 n’est pas un 4, regardez s’il y a un 4 parmi d2 ou d3, et dans l’affirmative,
permutez-le avec d1 pour qu’en d1 on ait un 4.
– Si d2 n’est pas un 2, regardez s’il y a un 2 en d3. Si oui, permutez-le avec d2 pour
qu’en d2 on ait un 2.
– Ici on devrait avoir un début de 421. Si cela n’est pas le cas, relancez chacun des dés
pour tenter d’obtenir un 421.
Écrivez une procédure jouerTour421(nj,s) qui effectue un tour de jeu à la recherche
du 421 :
– L’ordinateur lance les trois dés.
– Il relance une deuxième fois les dés qui n’ont pas de valeurs convenables.
– Il relance une troisième fois les dés qui n’ont pas de valeurs convenables.
Unisciel algoprog – Le 421 Contre l’ordinateur / it12
5
A l’issue des lancers, affichez la combinaison obtenue puis restituez le nombre de jetons
potentiellement gagnés dans nj et l’évaluation de la combinaison réalisée dans s.
Complétez la procédure jouerTourST pour qu’elle appelle la stratégie ci-dessus dans le
cas où st vaut 2.
1.4
Recherche du Brelan
Cette stratégie consiste à tout faire pour obtenir un brelan. Son fonctionnement est le
même que son homologue pour le 421.
Écrivez une procédure rejouerTourBrelan(d1,d2,d3) qui relance un ou plusieurs dés
afin (de tenter) d’obtenir un brelan. La combinaison définie par d1, d2 et d3 est telle que
d1>=d2>=d3 et elle n’est pas un brelan.
Aide méthodologique
– Si d1 vaut d2, relancez d3.
– Sinon si d2 vaut d3, relancez d1.
– Sinon si d1 vaut d3, relancez d2.
– Sinon relancez deux dés.
Unisciel algoprog – Le 421 Contre l’ordinateur / it12
6
Copiez/collez la procédure jouerTour421 en la procédure jouerTourBrelan(nj,s) et
remplacez l’appel de la procédure rejouerTourXXX.
Complétez la procédure jouerTourST pour qu’elle appelle la stratégie ci-dessus dans le
cas où st vaut 3.
1.5
Recherche tierce
Cette stratégie consiste à tout faire pour obtenir une tierce. Son fonctionnement est
similaire à celui de la recherche du brelan.
Copiez/collez la procédure rejouerTourBrelan en la procédure
rejouerTourTierce(d1,d2,d3) puis modifiez-la de sorte qu’elle recherche une tierce.
La combinaison définie par d1, d2 et d3 est telle que d1>=d2>=d3 et elle n’est pas une
tierce.
Aide méthodologique
– Si d1 vaut d2+1, relancez d3.
– Sinon si d2 vaut d3+1, relancez d1.
– Sinon si d1 vaut d3+2, relancez d2.
– Sinon relancez deux dés (ici le plus grand d1 et le plus petit d3).
Unisciel algoprog – Le 421 Contre l’ordinateur / it12
7
Copiez/collez la procédure jouerTour421 en la procédure jouerTourTierce(nj,s) et
remplacez l’appel de la procédure rejouerTourXXX.
Complétez la procédure jouerTourST pour qu’elle appelle la stratégie ci-dessus dans le
cas où st vaut 4.
1.6
Stratégie Préférence
Cette stratégie consiste à évaluer à « combien de dés » forme une combinaison (421,
brelan ou tierce). Pour cela, il faut d’abord écrire les fonctions combienXXX dont les
paramètres d1, d2 et d3 tels que d1>=d2>=d3 forment une combinaison.
Écrivez une fonction evalBool(b) qui renvoie 1 si un booléen b est Vrai, 0 sinon.
Écrivez une fonction combien421(d1,d2,d3) qui calcule et renvoie le nombre de dés à
relancer pour obtenir un 421.
Aide méthodologique C’est la même stratégie que la procédure rejouerTour421
mais à la place de relancer les dés, on les évalue.
Unisciel algoprog – Le 421 Contre l’ordinateur / it12
8
De même, écrivez une fonction combienBrelan(d1,d2,d3) qui calcule et renvoie le
nombre de dés à relancer pour obtenir un brelan.
Enfin écrivez une fonction combienTierce(d1,d2,d3) qui calcule et renvoie le nombre
de dés à relancer pour obtenir une tierce.
Écrivez une fonction combinaison(d1,d2,d3) qui teste et renvoie Vrai si la combinaison
de dés est un 421, un brelan ou une tierce, Faux sinon.
Écrivez alors une procédure jouerTourPref(nj,s) qui élabore alors la stratégie suivante,
dans l’ordre de préférence :
– À un dé d’avoir un 421, on le tente.
– À un dé d’avoir un brelan, on le tente.
– À deux dés d’avoir un 421, on le tente.
– À un dé d’avoir une tierce, on la tente.
– Sinon, on cherche le 421.
Unisciel algoprog – Le 421 Contre l’ordinateur / it12
9
Complétez la procédure jouerTourST pour qu’elle appelle la stratégie ci-dessus dans le
cas où st vaut 5.
Validez vos procédures avec la solution.
Solution simple
alg @[pg-ret421A1.alg]
1.7
Jouer
Lancez plusieurs parties pour opposer des stratégies différentes.
Unisciel algoprog – Le 421 Contre l’ordinateur / it12
Imaginez une solution pour évaluer par programme quelle stratégie est la meilleure.
1.8
Stratégie ultime
C’est la stratégie ultime que nous vous laissons mettre au point.
10