%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Piles et Files/Piles et Files|Accueil · Piles et Files]] %% nav-fin %% # Évaluation - La Bataille > [!info] 🎯 Objectif > Simuler une partie du jeu de la bataille avec deux files de cartes, puis présenter le programme en soutenance. Cette page sert à la préparation de l'évaluation de la compétence [[Code et Développement/Programmation/Piles et Files/Piles et Files|Piles et Files]]. La validation se fait lors d'une soutenance individuelle. ## Le problème Deux joueurs ont chacun un paquet de cartes. Chaque paquet est une file : on joue la carte du dessus et on range les cartes gagnées dessous. Un tour se déroule ainsi : 1. Chaque joueur retourne la carte du dessus de son paquet. 2. La carte la plus forte gagne. L'ordre des valeurs est 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A. La couleur ne compte pas. 3. Le gagnant range sous son paquet toutes les cartes du tour : d'abord celles du joueur 1, dans l'ordre où elles ont été posées, puis celles du joueur 2. Si les deux cartes ont la même valeur, il y a bataille. Chaque joueur pose trois cartes face cachée, puis retourne une nouvelle carte. Ces nouvelles cartes se comparent comme au point 2. Une nouvelle égalité déclenche une nouvelle bataille. Toutes les cartes posées vont au gagnant, dans l'ordre du point 3. Une bataille, même répétée, compte pour un seul tour. La partie s'arrête quand un joueur n'a plus de cartes. Si un joueur n'a pas assez de cartes pour terminer une bataille, la partie est nulle. Les notions utilisées sont celles de la page [[Code et Développement/Programmation/Piles et Files/02_Les files|Les files]]. ## Entrée et sortie - Ligne 1 : le nombre n de cartes du joueur 1. - Lignes suivantes : ses n cartes, du dessus vers le dessous. Une carte s'écrit valeur puis couleur, par exemple `10H` ou `AD`. - Ligne suivante : le nombre m de cartes du joueur 2, puis ses m cartes. La sortie est `1 T` ou `2 T`, où 1 ou 2 est le gagnant et T le nombre de tours joués. En cas de partie nulle, la sortie est `PAT`. ## Les cas de test ```sq-fichier nom: cas1.txt --- 3 AD KC QC 3 KH QS JC ``` ```sq-fichier nom: cas2.txt --- 3 5C 3D 2H 3 8D 9S 10C ``` ```sq-fichier nom: cas3.txt --- 6 4D QS 9S 2H 9H JS 6 4C KC QH 8H 7D 3D ``` ```sq-fichier nom: cas4.txt --- 1 AD 1 AH ``` ```sq-fichier nom: cas5.txt --- 26 3D 7H AC 4S 9D AS 6C 6H KD 8C 4C JC 3C 10H 4H 7D 9C 6S 8S 2S QH 10S QD 6D QS 7C 26 2D 10C 3S QC KC JS KS JD AH JH 9S 9H 2H 8H 5H 10D 5S AD 3H 2C KH 5D 4D 8D 7S 5C ``` ## Votre programme Écrivez la fonction `resoudre(texte)`. Elle reçoit le contenu complet d'un cas de test et renvoie la sortie attendue sous forme de chaîne. `collections.deque` convient pour les deux files. ```sq-python def resoudre(texte): lignes = texte.strip("\n").split("\n") # À compléter : renvoyer la sortie attendue sous forme de chaîne return "" print(resoudre(open("cas1.txt").read())) #--- tests assert resoudre(open("cas1.txt").read()) == "1 3", "cas 1 : victoire du joueur 1" assert resoudre(open("cas2.txt").read()) == "2 3", "cas 2 : victoire du joueur 2" assert resoudre(open("cas3.txt").read()) == "1 2", "cas 3 : bataille dès le premier tour" assert resoudre(open("cas4.txt").read()) == "PAT", "cas 4 : partie nulle faute de cartes" assert resoudre(open("cas5.txt").read()) == "2 1720", "cas 5 : partie complète de 52 cartes" ``` ## Pour la soutenance - Justifier le choix d'une file pour chaque paquet. - Expliquer l'ordre dans lequel les cartes gagnées sont rangées. - Montrer comment le programme détecte une partie nulle. Puzzle d'origine sur CodinGame : [Winamax Battle](https://www.codingame.com/training/medium/winamax-battle). %% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Piles et Files/Piles et Files|Accueil · Piles et Files]] %% nav-fin %%