Partage
  • Partager sur Facebook
  • Partager sur Twitter

Blocage à un problème France IOI

    30 mai 2018 à 14:54:48

    Bonjour,

    J' m'entraine actuellement sur le site France IOI.

    Mais je n'arrive pas à terminer l'exercice "carré magique".

    Voici l'énoncé:

    Mon code:

    nb_côté = int(input())
    
    tableau = [[0] * nb_côté for _ in range(nb_côté)]
    comptage = [0] * (nb_côté*nb_côté+1)
    
    valeur = 0
    fonctionne = True
    valeur_en_cour1 = 0
    valeur_en_cour2 = 0
    
    # lecture et assignation des entrées dans le tableau
    for lire in range(0,nb_côté):
       entrée = input().split()
    
       for assigner in range(0,nb_côté):
          tableau[lire][assigner] = int(entrée[assigner])
    
    # détermine la première valeur qui sera à comparer
    for déterminer in range(0,nb_côté):
       valeur_en_cour1+=tableau[0][déterminer]
    
    
    valeur=valeur_en_cour1
    
    # lit les ligne et les colonnes et les additionne 
    for ligne in range(0,nb_côté):
       valeur_en_cour1=0
       valeur_en_cour2=0
    
       for ligne2 in range(0,nb_côté):
          valeur_en_cour1+=tableau[ligne][ligne2]
          valeur_en_cour2+=tableau[ligne2][ligne]
    
       if valeur_en_cour1!=valeur:
    
          fonctionne=False
    
       elif valeur_en_cour2!=valeur:
    
          fonctionne=False
    
    
    
    if fonctionne:
    
       valeur_en_cour1=0
    
    # lit la première diagonale
       for diagonale1 in range(0,nb_côté):
          valeur_en_cour1+=tableau[diagonale1][diagonale1]
    
       if valeur_en_cour1!=valeur:
          fonctionne=False
    
       if fonctionne:
    
          valeur_en_cour1=0
          valeur_en_cour2=0
    
    # lit la deuxième diagonale
          for diagonale2 in range(nb_côté-1,-1,-1):
             valeur_en_cour1+=tableau[valeur_en_cour2][diagonale2]
             valeur_en_cour2+=1
    
          if valeur_en_cour1!=valeur:
    
             fonctionne=False
    
          if fonctionne:
    # parcour le tableau pour déterminer si chaque nombre n'a été lu qu'une seule fois
             for attribuer in range(0,nb_côté):
                for attribuer2 in range(0,nb_côté):
    
                   try:
                      if comptage[tableau[attribuer][attribuer2]] == 0 :
    
                         comptage[tableau[attribuer][attribuer2]]+=1
    
                      else:
    
                         fonctionne=False
                   except:
                      fonctionne=False
    # affiche yes ou no
    if fonctionne:
    
       print("yes")
    
    else:
    
       print("no")
                      
    

    Le résultat:

    En espérant que vous pourrez m'aider.

    • Partager sur Facebook
    • Partager sur Twitter
      30 mai 2018 à 15:39:24

      Salut,

      Essaye d'afficher les valeurs d'entrée du test qui foire.

      Une fois le pb identifié tu pourras le résoudre.

      • Partager sur Facebook
      • Partager sur Twitter
        30 mai 2018 à 16:49:42

        Et comment puis-je connaitre les valeurs d'entrée?
        • Partager sur Facebook
        • Partager sur Twitter
          30 mai 2018 à 17:23:13

          Le problème c'est que je ne peut pas afficher chaque test un par un.

          Par exemple, si les test 4 , 9 et 10 sont faux, je ne peux voir que les résultat du 4.

          • Partager sur Facebook
          • Partager sur Twitter
            30 mai 2018 à 18:04:36

            Et du coup là, si tu essayes de print ça affiche quoi?

            nb_côté = int(input())
             
            tableau = [[0] * nb_côté for _ in range(nb_côté)]
            comptage = [0] * (nb_côté*nb_côté+1)
             
            valeur = 0
            fonctionne = True
            valeur_en_cour1 = 0
            valeur_en_cour2 = 0
             
            # lecture et assignation des entrées dans le tableau
            for lire in range(0,nb_côté):
               entrée = input().split()
               print(entrée)
             
               for assigner in range(0,nb_côté):
                  tableau[lire][assigner] = int(entrée[assigner])
             
            # détermine la première valeur qui sera à comparer
            for déterminer in range(0,nb_côté):
               valeur_en_cour1+=tableau[0][déterminer]
             
             
            valeur=valeur_en_cour1
             
            # lit les ligne et les colonnes et les additionne
            for ligne in range(0,nb_côté):
               valeur_en_cour1=0
               valeur_en_cour2=0
             
               for ligne2 in range(0,nb_côté):
                  valeur_en_cour1+=tableau[ligne][ligne2]
                  valeur_en_cour2+=tableau[ligne2][ligne]
             
               if valeur_en_cour1!=valeur:
             
                  fonctionne=False
             
               elif valeur_en_cour2!=valeur:
             
                  fonctionne=False
             
             
             
            if fonctionne:
             
               valeur_en_cour1=0
             
            # lit la première diagonale
               for diagonale1 in range(0,nb_côté):
                  valeur_en_cour1+=tableau[diagonale1][diagonale1]
             
               if valeur_en_cour1!=valeur:
                  fonctionne=False
             
               if fonctionne:
             
                  valeur_en_cour1=0
                  valeur_en_cour2=0
             
            # lit la deuxième diagonale
                  for diagonale2 in range(nb_côté-1,-1,-1):
                     valeur_en_cour1+=tableau[valeur_en_cour2][diagonale2]
                     valeur_en_cour2+=1
             
                  if valeur_en_cour1!=valeur:
             
                     fonctionne=False
             
                  if fonctionne:
            # parcour le tableau pour déterminer si chaque nombre n'a été lu qu'une seule fois
                     for attribuer in range(0,nb_côté):
                        for attribuer2 in range(0,nb_côté):
             
                           try:
                              if comptage[tableau[attribuer][attribuer2]] == 0 :
             
                                 comptage[tableau[attribuer][attribuer2]]+=1
             
                              else:
             
                                 fonctionne=False
                           except:
                              fonctionne=False
            # affiche yes ou no
            if fonctionne:
             
               print("yes")
             
            else:
               print("no")



            • Partager sur Facebook
            • Partager sur Twitter
              30 mai 2018 à 20:43:19

              J'ai réussi à avoir les entrées de tout les test.

              Le tableau pour le 18 et le 21 est le même, c'est  [[5, 0, 7], [6, 4, 2], [1, 8, 3]].

              -
              Edité par NathanMart 30 mai 2018 à 21:24:43

              • Partager sur Facebook
              • Partager sur Twitter
                30 mai 2018 à 22:31:11

                Tu dois rajouter un test.

                Relis l'ennonce, les nombres doivent commencer a un, la il y a un zero.

                • Partager sur Facebook
                • Partager sur Twitter
                  27 novembre 2019 à 16:20:25

                  Bonjour @NathanMart, comment as-tu réussi à avoir les entrées de tous les tests ? Ca me serait bien utile... ^^

                  Merci !

                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 novembre 2019 à 17:02:53

                    MarjolaineBaratte a écrit:

                    Bonjour @NathanMart, comment as-tu réussi à avoir les entrées de tous les tests ? Ca me serait bien utile... ^^


                    Il te suffit de placer les données dans une liste et de l'afficher. Et comme ils te donnent aussi la réponse, tu peux facilement accéder à tous les tests mais un par un, faut être patient.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 décembre 2019 à 19:21:39

                      Bonjour @PascalOrtiz, j'y ai pensé mais comme il faut valider les tests précédents pour arriver au test en question, je ne peux pas faire un programme qui affiche le contenu de la liste ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 décembre 2019 à 20:43:24

                        Tu peux facilement valider le tests si tu as les entrées et la sortie. Or, il te donnent la sortie, donc t'a qu'à la recopier, la mettre dans ton code et l'afficher à l'essai suivant.  Faut juste assez motivé pour relancer le programme autant de fois qu'il y a de tests.

                        Le code ci-dessous permet d'accéder au test n°5:

                        nbCases=int(input())
                        sommeLigne=0
                        sommeRef=0
                        sommeDiag=0
                        sommeDiag2=0
                        sommeCol=0
                        tableau=[]
                        condition=0
                        chiffres=[0]*(nbCases*nbCases)
                        chiffresRef=[1]*(nbCases*nbCases)
                         
                        #Construction du tableau 
                        for loop in range (nbCases):
                           ligne= input().split()
                           for loop in range (nbCases):
                              ligne[loop] = int(ligne[loop])
                           tableau.append(ligne)
                        tests=[
                        
                            [
                            [[6, 1, 8], [7, 5, 3], [2, 9, 4]], 
                            "yes"],
                            
                            [
                            [[5]], 
                            "no"
                                ],
                                
                            
                            [
                            [[5, 2, 7], [8, 6, 4], [9, 1, 3]], 
                            "no"
                                ],
                        
                           [
                            [[4, 14, 15, 1], [9, 7, 6, 12], [5, 11, 10, 8], [16, 2, 3, 13]] , 
                            "yes"
                                ],
                                        
                                
                               
                        
                        
                        ]
                        inside=False
                        
                        for test, rep in tests:
                            if tableau == test:
                                print(rep)
                                inside=True
                        if not inside:
                            print(tableau)
                        



                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 décembre 2019 à 12:40:28

                          En effet c'est fastidieux mais c'est malin ! Merci !
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Blocage à un problème France IOI

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown