Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice France IOI - Visite de la Mine

    27 septembre 2019 à 12:15:05

    Voici le sujet : 

    L'un des produits nécessaires pour la fabrication de l'onguent magique, un minerai très rare, ne se trouve qu'en un seul endroit sur la planète, au fond de la plus vieille mine existante, jadis exploitée par le peuple nain. Désormais seuls quelques uns d'entre eux sont encore sur place, afin de guider les voyageurs (commerçants et touristes) au sein de ce dédale de cavernes et galeries.

    Après avoir engagé un guide, il vous mène jusqu'à l'endroit prévu mais un petit désaccord sur le paiement de ses services le pousse à vous laisser sur place, sans aucune chance de retrouver la sortie. Heureusement votre robot à conservé en mémoire la suite des déplacements qui vous ont amené de l'entrée jusqu'à votre position actuelle, il ne vous reste plus qu'à suivre le chemin inverse !

    Ce que doit faire votre programme :

    Il existe 5 types de déplacements, représentés par 5 entiers différents : aller à gauche (1), aller à droite (2), aller tout droit (3), monter (4) et descendre (5).

    Le premier entier à lire est le nombre total de déplacements (1000 au maximum). Ensuite, chaque déplacement (représenté par un entier) est indiqué sur sa propre ligne.

    Vous devez afficher la suite des déplacements à faire pour aller de votre position actuelle à la sortie.

    Exemple

    entrée :

    6
    1
    3
    2
    4
    4
    5

    sortie :

    4
    5
    5
    1
    3
    2

    Voici mon code

    nbDeplacement=int(input())
    CheminEntrée=[0]* nbDeplacement
    for deplacement in range (nbDeplacement):
       deplacement=int(input())
       if deplacement==5:
          CheminEntrée[deplacement]==4
       if deplacement==4:
          CheminEntrée[deplacement]==5 
       else:
          CheminEntrée[deplacement]=deplacement
    for deplacement in range(nbDeplacement):
       print(CheminEntrée[deplacement])
       



    et le message d'erreur qui s'affiche.

    Échec

    La réponse donnée par votre programme est incorrecte. Il a affiché :

    0
    1
    2
    3
    0
    5
    

    au lieu de :

    4
    5
    5
    1
    3
    2
    

    <input style="font-family: inherit; font-size: inherit; margin: 3px 0px;" type="button" value="Surligner le premier caractère différent" />

    Pourriez vous m'aider à modifier les conditions pour pas qu'elles se suivent car si je comprends bien, si la valeur qui sort est un 4 je veux la transformer en 5 mais aux if suivant il retransforme mon 5 en 4... 
    Egalement je n'ai pas compris comment afficher la liste à l'envers.
    Merci de votre aide

    -
    Edité par RaphaëlBitoun 27 septembre 2019 à 12:23:20

    • Partager sur Facebook
    • Partager sur Twitter
      27 septembre 2019 à 12:19:21

      Tu as oublié les " : " à la fin des tes lignes " for "

      Il faut aussi que tu inverse gauche et droite (en plus de monter et descendre)

      -
      Edité par Jojuss 27 septembre 2019 à 12:20:58

      • Partager sur Facebook
      • Partager sur Twitter
        27 septembre 2019 à 12:27:57

        Salut, 

        oui j'ai corrigé les erreurs de syntaxes. 

        Par contre j'envisageais juste de transformer le 4 en 5 et les 5 en 4 dans ma liste initial et ensuite il n'y a qu'à la lire à l'envers

        car dans l'énoncé 

        1 3 2 4 4 5 

        devient 

        4 5 5 2 3 1

        donc en changeant juste les 4 par des 5 et des 5 par des 4 je n'ai plus qu'à imprimer ma liste en partant de la fin non? 

        Seulement il doit y avoir un hic dans mes conditions puisqu'elles s'enchainent

        Merci de ton aide 

        • Partager sur Facebook
        • Partager sur Twitter
          27 septembre 2019 à 13:38:15

          Oui ton idée est bonne ça devrait fonctionner, par contre là tu va avoir des problèmes :

          for deplacement in range (nbDeplacement): #ici déplacement est l'indice dans la liste CheminEntrée
             deplacement=int(input())               # ici déplacement est la valeur du déplacement, ça va coincer si tu changes pas les noms
             if deplacement==5:
                CheminEntrée[deplacement]==4


          Et il faut aussi remplacer les 1 par 2 et inversement

          -
          Edité par Jojuss 27 septembre 2019 à 13:40:29

          • Partager sur Facebook
          • Partager sur Twitter
            27 septembre 2019 à 13:43:38

            Oui justement je comprends le problème mais je ne vois pas trop comment y remedier.

            En plus si je rajoute les if pour remplacer 1 par 2 et 2 par 1 je vais me retrouver dans la même situation actuelle pour les 4 et 5....

            Peux tu également me  dire le code pour afficher la liste à l'envers. Je ne le retrouve pas dans les cours précédent sur le site.

            merci 

            • Partager sur Facebook
            • Partager sur Twitter
              27 septembre 2019 à 14:31:10

              nbDeplacement=int(input())
              CheminEntrée=[0]* nbDeplacement
              for deplacement in range (nbDeplacement):
                 valeur_deplacement=int(input())
                 if valeur_deplacement==5:
                    CheminEntrée[deplacement]==4
                 if valeur_deplacement==4:
                    CheminEntrée[deplacement]==5
                 else: #rajoute le 1<->2
                    CheminEntrée[deplacement]=deplacement
              for deplacement in range(nbDeplacement):
                 print(CheminEntrée[-deplacement])

               Pour parcourir à l'envers tu peux faire soit :

              l=[1,2,3,4]
              for i in range(3):
                  print(l[-i])
              
              #ou alors
              
              l.reverse()
              
              for i in range(3):
                  print(l[i])
              



              • Partager sur Facebook
              • Partager sur Twitter
                27 septembre 2019 à 15:31:02

                Je comprends pas, 

                pourquoi inverser les 1 et 2 puisqu'ils faut juste les sortir dans l'ordre inverse. 

                Car si je remplace 1 par 2 et 2 par 1 et que je sors la liste à l'envers ce ne sera pas bon. 

                Et le site indique une erreur de syntaxe sur le code que tu m'a donné 

                nbDeplacement=int(input())
                CheminEntrée=[0]* nbDeplacement
                for deplacement in range (nbDeplacement):
                   valeur_deplacement=int(input())
                   if valeur_deplacement==5:
                      CheminEntrée[deplacement]==4
                   if valeur_deplacement==4:
                      CheminEntrée[deplacement]==5
                   else: 
                      CheminEntrée[deplacement]=deplacement
                for deplacement in range(nbDeplacement):
                   print(CheminEntrée[-deplacement])<br><br>

                me donne une erreur :

                Erreur de compilation :

                File "exe", line 12
                    print(CheminEntrée[-deplacement])<br><br>
                                                         ^
                SyntaxError: invalid syntax

                Merci

                • Partager sur Facebook
                • Partager sur Twitter
                  27 septembre 2019 à 15:37:44

                  Et bien si en rentrant tu tournes à gauche, quand tu le fait en sens inverse il faut bien tourner à droite non ?

                  Et essaye de comprendre le code que je te donne au lieu de bêtement le rentrer sur le site...

                  Tu vois bien que les balises <br><br> n'ont rien a voir avec python, supprimes les ...

                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 septembre 2019 à 15:55:39

                    J'arrive à créer ma liste avec les nouvelles valeur à afficher 

                    nbDeplacement=int(input())
                    CheminEntrée=[0]* nbDeplacement
                    for deplacement in range (nbDeplacement):
                       valeur_deplacement=int(input())
                       if valeur_deplacement==5:
                          CheminEntrée[deplacement]=4
                       if valeur_deplacement==4:
                          CheminEntrée[deplacement]=5
                       if valeur_deplacement==1: 
                          CheminEntrée[deplacement]=2
                       if valeur_deplacement==2: 
                          CheminEntrée[deplacement]=1
                       if valeur_deplacement==3: 
                          CheminEntrée[deplacement]=3
                       
                            
                    for deplacement in range(nbDeplacement):
                       print(CheminEntrée[deplacement])

                    et la résultat est 

                    Test 1 Échec

                    La réponse donnée par votre programme est incorrecte. Il a affiché :

                    2
                    3
                    1
                    5
                    5
                    4
                    

                    au lieu de :

                    4
                    5
                    5
                    1
                    3
                    2
                    

                    <input style="font-family: inherit; font-size: inherit; margin: 3px 0px;" type="button" value="Surligner le premier caractère différent" />

                    0 %
                    Test 2 Succès

                    Exécuté en 0,05 seconde.

                    100 %
                    Test 3 Succès

                    Exécuté en 0,05 seconde.

                    100 %
                    Test 4 Succès

                    Exécuté en 0,05 seconde.

                    100 %
                    Test 5 Succès

                    Exécuté en 0,06 seconde.

                    100 %
                    Test 6 Succès

                    Exécuté en 0,06 seconde.

                    100 %
                    Test 7 Échec

                    La réponse donnée par votre programme est incorrecte.

                    0 %

                    Donc j'imagine que j'ai à afficher la liste à l'envers. 

                    et quand je rentre ton code (sans le br br lol) 

                    nbDeplacement=int(input())
                    CheminEntrée=[0]* nbDeplacement
                    for deplacement in range (nbDeplacement):
                       valeur_deplacement=int(input())
                       if valeur_deplacement==5:
                          CheminEntrée[deplacement]=4
                       if valeur_deplacement==4:
                          CheminEntrée[deplacement]=5
                       if valeur_deplacement==1: 
                          CheminEntrée[deplacement]=2
                       if valeur_deplacement==2: 
                          CheminEntrée[deplacement]=1
                       if valeur_deplacement==3: 
                          CheminEntrée[deplacement]=3
                       
                            
                    for deplacement in range(nbDeplacement):
                       print(CheminEntrée[-deplacement])
                    Test 1 Échec

                    La réponse donnée par votre programme est incorrecte. Il a affiché :

                    2
                    4
                    5
                    5
                    1
                    3
                    

                    au lieu de :

                    4
                    5
                    5
                    1
                    3
                    2
                    

                    <input style="font-family: inherit; font-size: inherit; margin: 3px 0px;" type="button" value="Surligner le premier caractère différent" />

                    0 %


                    Ca me change les valeurs mais ne les affiche pas dans l'ordre inverse, il doit y avoir qlqch que je n'ai pas compris.

                    Merci

                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 septembre 2019 à 16:24:17

                      Quand tu parcours une liste à l'envers la première case (en réalité la dernière ) est à l'indice -1 et pas -0 comme on pourrait imaginer. Donc si tu as une liste de 5 éléments:

                      l=[1,2,3,4,5]
                      
                      for i in range(1,6):
                          print(l[-i])
                      

                      Normalement avec ça tu as tout pour réussir. 

                      Essayer d’accéder à l'indice -0, tu verra que ça te retourne en fait l'indice 0.

                      -
                      Edité par Jojuss 27 septembre 2019 à 16:25:31

                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 septembre 2019 à 16:55:09

                        Merci beaucoup pour ton aide j'ai trouvé c'est vraiment sympa!!  même si la façon dont fonctionne le programme reste quand même un peu flou à mes yeux, j'ai du mal à bien visualiser ce qu'il fait .... ca viendra!lol

                        MERCI

                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 novembre 2019 à 19:56:09

                          mercii bcp

                          -
                          Edité par nova-astra 17 novembre 2019 à 20:16:36

                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 décembre 2019 à 18:05:27

                            bonjour,

                            dans le cour de France ioi sur la boucle for, il est écrit que -1 correspond à l'indice d'un tableau pour décrémenter. Sur cet exercice, je l'ai fait et ça me met une erreur. Je ne comprends pas.

                            totDeplac = int(input())
                            tableauDeplac = [0] * totDeplac
                            
                            for types in range(totDeplac):
                                valeurDepl = int(input())
                                if valeurDepl == 5:
                                    tableauDeplac[types] = 4
                                if valeurDepl == 4:
                                    tableauDeplac[types] = 5
                                if valeurDepl == 2:
                                    tableauDeplac[types] = 1
                                if valeurDepl == 1:
                                    tableauDeplac[types] = 2
                                if valeurDepl == 3:
                                    tableauDeplac[types] = 3
                            
                            print(tableauDeplac)
                            
                            for types in range(-1, 0, totDeplac):
                                print(types)
                                print(tableauDeplac[types])
                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 janvier 2020 à 13:39:58

                              Malgré les aides qu'il y a eu je ne comprend toujours pas 
                              nbDeplacement=int(input())
                              CheminEntrée=[0] * nbDeplacement
                              for deplacement in range (nbDeplacement):
                                 valeur_depl=int(input())
                                 if valeur_depl==5:
                                    CheminEntrée[deplacement]=4
                                 if valeur_depl==4:
                                    CheminEntrée[deplacement]=5
                                 if valeur_depl==1:
                                    CheminEntrée[deplacement]=2
                                 if valeur_depl==2:
                                    CheminEntrée[deplacement]=1
                                 if valeur_depl==3:
                                    CheminEntrée[deplacement]=3
                              for i in range(nbDeplacement):
                                 print(CheminEntrée[-deplacement])

                              -
                              Edité par Franceioii 8 janvier 2020 à 13:43:27

                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 janvier 2020 à 14:42:13

                                pourquoi -deplacement à la fin ?

                                -
                                Edité par thelinekioubeur 8 janvier 2020 à 14:42:35

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  11 janvier 2020 à 14:25:16

                                  Je sais pas c'est ce qui est dans le programme proposé en haut, et la personne à dit qu'elle avait réussi en modifiant des choses mais je trouve pas quoi ^^ que je mette le - ou pas ca reste pas bon
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    12 janvier 2020 à 0:36:59

                                    et le i de la boucle il sert à rien ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      12 janvier 2020 à 9:23:38

                                      nbDeplacement=int(input())
                                      CheminEntrée=[0] * nbDeplacement
                                      for deplacement in range (nbDeplacement):
                                         valeur_depl=int(input())
                                         if valeur_depl==5:
                                            CheminEntrée[deplacement]=4
                                         if valeur_depl==4:
                                            CheminEntrée[deplacement]=5
                                         if valeur_depl==1:
                                            CheminEntrée[deplacement]=2
                                         if valeur_depl==2:
                                            CheminEntrée[deplacement]=1
                                         if valeur_depl==3:
                                            CheminEntrée[deplacement]=3
                                      for i in range(nbDeplacement):
                                         print(CheminEntrée[i])
                                      J'ai donc ca maintenant ? Mais ca ne marche toujours pas
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        12 janvier 2020 à 10:41:34

                                        Ça ne marche pas parce que non seulement il faut faire les déplacements inverses (tu l'as fait) mais aussi dans l'ordre inverse (tu ne l'as pas fait).
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          12 janvier 2020 à 12:49:19

                                          Ah oui ! Mais comment on fait ca ? Je suis complètement perdu
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            12 janvier 2020 à 15:10:14

                                            Franceioii a écrit:

                                            Ah oui ! Mais comment on fait ca ? Je suis complètement perdu


                                            Lis ta liste CheminEntrée par la fin, ce qui peut se faire de multiples façons, par exemple, en changeant dans la boucle deplacement en nbDeplacement-1-deplacement ou en utilisant un indice auxiliaire.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              12 janvier 2020 à 16:58:10

                                              Ah d'accord merci beaucoup :)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                4 mai 2020 à 17:38:12

                                                Bonjour, je suis aussi bloquée sur ce programme, la première et la dernière valeur affichées sont fausses et je ne comprends pas pourquoi ?

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  4 mai 2020 à 17:43:45

                                                  les indices du range ne sont pas bons je suppose.

                                                  De toute façon range est inutile ici :

                                                  for d in reversed(direction):
                                                      print(d)
                                                  



                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    4 mai 2020 à 18:02:28

                                                    Merci beaucoup de votre réponse, je ne connais pas l'instruction reversed (pas encore vue dans le parcours lycée de France IOI) mais je ne suis pas loin, tout est inversé sauf le premier déplacement et le dernier. Pourquoi les indices du range ne sont-ils pas bons, je vais bien "à l'envers" avec un pas de 1 ?

                                                    Il faut mettre des elif au lieu des if sinon le programme doit continuer à modifier les valeurs ! 

                                                    -
                                                    Edité par KarineH71 4 mai 2020 à 21:51:26

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      4 mai 2020 à 18:21:23

                                                      KarineH71 a écrit:

                                                      Merci beaucoup de votre réponse, je ne connais pas l'instruction reversed (pas encore vue dans le parcours lycée de France IOI) mais je ne suis pas loin, tout est inversé sauf le premier déplacement et le dernier. Pourquoi les indices du range ne sont-ils pas bons, je vais bien "à l'envers" avec un pas de 1 ?

                                                      C'est assez cocasse en effet. Il faut soit afficher (le print) tout de suite sans attendre la fin soit utiliser des elif.

                                                      -
                                                      Edité par PascalOrtiz 4 mai 2020 à 18:21:52

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        4 mai 2020 à 23:49:29

                                                        Bonsoir PascalOrtiz, ça m’intrigue, vous pouvez détailler svp ? Merci d’avance

                                                        -
                                                        Edité par KarineH71 5 mai 2020 à 0:01:01

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          5 mai 2020 à 0:03:34

                                                          KarineH71 a écrit:

                                                          Bonsoir PascalOrtiz, ça m’intrigue, vous pouvez détailler svp ?

                                                          Imaginons que direction[i]=1 alors vous changez direction[i]  en 2. Le problème c'est  juste que derrière vous avez un if direction[i]  == 2 et comme vous avez mis if au lieu de elif, le if va être examiné et vous allez encore changer la valeur de direction[i] alors qu'elle était bonne. Donc, ce n'est même pas une histoire d'affichage immédiat (contrairement à ce que je vous avais dit) mais c'est qu'il faut mettre des elif au lieu de if à partir de la ligne 7. Bien souvent écrire if ou elif ne change pas l'exécution du programme mais pas dans votre cas.

                                                          La prochaine au lieu de faire un screnshot de votre code, pensez à mettre votre code dans des balises sinon on ne peut pas le tester.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            5 mai 2020 à 0:18:11

                                                            Ah je comprends merci !!! Et ok pour les screnshot.

                                                            Merci encore.

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              5 mai 2020 à 8:34:17

                                                              Bon aller petit one-liner, qui dit mieux ?
                                                              print(*reversed([{1:2,2:1,3:3,4:5,5:4}[int(input())] for _ in range(int(input()))]), sep="\n")

                                                              -
                                                              Edité par thelinekioubeur 5 mai 2020 à 8:36:21

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Exercice France IOI - Visite de la Mine

                                                              × 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