Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu de carte - la bataille france ioi

25 octobre 2017 à 20:52:50

Bonsoir,

J'ai un peu de difficulté à résoudre un des exos de france ioi, mon code échoue deux test sur 13 et je ne comprends pas où est l'erreur..

Mon code échoue deux test où l'égalité est de 13.

Dans ce cas particulier mon code n'affiche pas en première ligne le numéro du joueur gagnant (1 puis 2).

Vous avez sûrement déjà joué, étant enfant, au jeu de cartes appelé la « bataille ». Les enfants algoréens aiment aussi beaucoup jouer à une variante bien plus simple de ce jeu, et vous devez faire l’arbitre des parties. Comme il y a beaucoup d’enfants souhaitant jouer en même temps et que vous ne pouvez pas tout surveiller, vous décidez d’écrire un programme informatique pour déterminer le vainqueur de chaque partie.

Une partie se déroule ainsi :

  • On part d’un jeu contenant 52 cartes, chaque carte étant une lettre entre A et M, et chaque lettre étant présente 4 fois (avec différentes couleurs, mais on ne s’en occupera pas ici).
  • Les cartes, face cachée, sont mélangées et séparées en deux paquets (pas forcément de même taille !).
  • Les deux joueurs retournent la première carte de leur paquet : si les deux cartes sont identiques ils continuent à jouer, sinon celui qui a la carte la plus forte, c’est-à-dire la plus petite selon l’ordre alphabétique, gagne la partie.
  • Si un joueur n’a plus de carte, il perd ! Et oui, ce n’est pas très juste !
  • Si les deux joueurs n’ont en même temps plus de cartes, alors il y a égalité complète.

Étant donnés les deux paquets de cartes, à vous de déterminer le gagnant.

Entrée

L'entrée contient deux lignes, correspondant respectivement aux cartes du joueur 1 et du joueur 2, dans l'ordre. Un jeu de cartes est constitué uniquement de lettre majuscules entre A et M (sans espaces).

Sortie

Sur la première ligne, il faut indiquer « 1 », « 2 » ou « = » selon que le gagnant est le premier ou le second joueur, ou bien qu’il y a égalité complète.

Sur la seconde ligne, il faut indiquer le nombre d’égalités qui ont eu lieu avant que le jeu ne se termine. 

joueur1=input()
joueur2=input()
egalite=0
minimum=min(len(joueur1),len(joueur2))

if joueur1==joueur2: print("=")


for i in range(minimum):
   if joueur1[i]==joueur2[i]: 
      egalite+=1
   elif joueur1==joueur2: print("=")
   
   elif joueur1[i]>joueur2[i]:
      print("2")
      break
      
   else: 
      print("1")
      break
      
print(egalite)

 Merci d'avance

-
Edité par AILITA 25 octobre 2017 à 20:58:32

  • Partager sur Facebook
  • Partager sur Twitter
26 octobre 2017 à 10:16:53

Salut,

"elif joueur1==joueur2: print("=")"

Tu n'as pas besoin de faire ta vérification dans la boucle, tu la fais déjà avant. là, tu affiches (minimum+1) fois "=" en cas d'égalité totale

Sinon je ne vois pas de conditions en cas d'égalité sur le nombre de cartes minimum (ex : "AAA" vs "AAAB"), tu ne désigne pas de vainqueurs dans ce cas là

-
Edité par Kalioz 26 octobre 2017 à 10:18:26

  • Partager sur Facebook
  • Partager sur Twitter
26 octobre 2017 à 21:47:19

Oui la ligne

"elif joueur1==joueur2: print("=")"

s'est retrouvée là par erreur en recopiant mon code ici.
Merci pour la deuxième remarque, c'était en effet le problème !
  • Partager sur Facebook
  • Partager sur Twitter
24 août 2018 à 16:22:01 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


10 septembre 2022 à 18:13:40 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


10 septembre 2022 à 20:15:26

@MiklTheGrid Bonsoir, merci de ne pas déterrer d'ancien sujet. Créer le votre dans le respect des règles du forum à savoir qu'un message commence par des règles de politesses (un bonjour ou des salutations à la communauté et se termine par des remerciements par avance pour les futures réponses) un descriptif de votre problème et le code que vous avez écrit inséré sur le forum avec l'outil d'intégration de code soit le bouton code </>.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter