""" Question 3 - Carte au paille But : calculer le meilleur score possible au jeu. Le jeu consiste à choisir tour à tour une des cartes à l'extrémité d'une ligne de cartes (gauche ou droite). Lorsque toutes les cartes ont été prises, le joueur avec le plus grand score gagne. Approche : Comme il s'agit d'un jeu à somme nul (un nombre de points fixe est en jeu et réparti entre les joueurs à la fin de la partie), nous pouvons facilement utiliser l'algorithme minimax pour optimiser notre score, tout en supposant que notre adversaire fera de même. Ainsi, nous essayons de maximiser la valeur scoreNous - scoreAdversaire, tandis que notre adversaire essaie de la minimiser """ def tauntScore(cards: list[int]) -> int: def minimax( cards: list[int], maximizing: bool = True, gain: int = 0, total: int = 0 ) -> tuple[int, int]: if len(cards) == 0: return gain, total gain_left, total_left = minimax( cards[1:], not maximizing, gain + cards[0] if maximizing else gain - cards[0], total + cards[0] if maximizing else total ) gain_right, total_right = minimax( cards[:-1], not maximizing, gain + cards[-1] if maximizing else gain - cards[-1], total + cards[-1] if maximizing else total ) if maximizing: if gain_left > gain_right: return gain_left, total_left return gain_right, total_right else: if gain_left < gain_right: return gain_left, total_left return gain_right, total_right return minimax(cards)[1]