Bonjour à tous,
Je pense que l'explication est vraiment simple pour une personne habitué à python. Je m'excuse d'avance du pavé mais c'est nécessaire.
Je vais d'abord vous expliquer la situation de l'exercice.
On a deux joueurs
On a un jeu de 10 cartes(par exemple)
posé et alignés sur une table.
Chacun son tour, les joueurs prend une carte, jusqu'à l'épuisement total des cartes. On ne peut prendre que les extrémités : soit la première carte, soit la dernière.
A la fin, on compare le score de chacun en additionnant les valeurs des cartes obtenus : le roi vaut 13, la dame vaut 12, le valet vaut 11, l'as vaut 1 et les autres valent le nombre qu'il porte.
Le joueur ayant le score le plus élevé gagne la partie.
Première contrainte :
Notre adversaire est une petite nièce : sa stratégie de jeu prend systématiquement à chaque tour la carte de plus haute valeur.
(glouton)
Enoncé :
Je dois élaborer une stratégie de jeu pour la battre.
Et pour cela, je dois explorer toutes les enchainements de cartes possibles afin d'en déterminer le score maximum que je peux obtenir en battant petitenièce.
Voici la fonction :
1 2 3 4 5 6
| def score_max(jeu):
if len(jeu) == 0 :
return 0
else :
x = petiteniece(jeu)
return max(score_max( jeu[:-1]) + jeu[-1], score_max(jeu[1:]) + jeu[0] ) |
Cette fonction marche. Score_max([2,10,1,1]) donne 11.
Les cartes sont implémentés en liste : [1,9,8,7,13,5] par exemple est un jeu.
Mais je ne comprends par la partie :
max( score_max(jeu[:-1]) + jeu[-1] , score_max(jeu[1:]) + jeu[0] )
J'aurai besoin d'explication sur comment fonctionne la récursivité à ce stade ??
Je vous remercie de votre attention et je reste disposé à vous donner plus d'informations si besoin.
Partager