Partage
  • Partager sur Facebook
  • Partager sur Twitter

petit probleme sur france ioi

Sujet résolu
    15 juillet 2019 à 22:30:37

    Bonjour je coince depuis quelque temps sur cet exercice j'ai essayé la fonction reverse pour la premiere foi ca ne passe pouvez vous m'expliquer  ?

    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.

    Mon code dernière version

    totalmove=int(input())
    rmove=0
    chemin = [0]*totalmove
    for loop in range(totalmove):
       move=int(input())
       if move == 1:
          rmove == 2
       if move == 2:
          rmove == 1
       if move == 4:
          rmove == 5
       if move == 5:
          rmove == 4
       if move == 3:
          rmove == 3
       chemin[loop]=rmove
    chemin. reverse () 
    
    for loop in range(totalmove):
       print=(chemin[loop])



    maintenant il y a surement une facon plus simple d écrire ca si on peux m en éxpliquer une je dis pas non non plus 

    merci d avance  !

    • Partager sur Facebook
    • Partager sur Twitter
      15 juillet 2019 à 23:49:43

      Plutôt que d'utiliser la méthode reverse d'une liste, tu peux utiliser un range(totalmove - 1, 0, -1) à la place de ton range actuel et enlever la ligne chemin.reverse(). Comme ça tu ne perds pas le temps pris pour retourner une liste.

      À moins que j'ai mal compris ta question ?

      EDIT: Comme il n'y a pas de déplacement "Aller en arrière", cela signifie que ton personnage se retourne (ce que tu as traduit par l'affectation de rmove à 3 si move est de 3). Mais dans ce cas, si tu es allé à droite à l'aller, une fois retourné, pour revenir sur tes pas, il te faudra à nouveau tourner à droite. Tu n'as donc pas besoin de faire ta "traduction" avec rmove, affecte directement tes valeurs depuis la fin de la liste.

      PS: Bizarre ton print=() sur la fin, faute de frappe en recopiant le code ?

      -
      Edité par BunshinKage 15 juillet 2019 à 23:53:30

      • Partager sur Facebook
      • Partager sur Twitter
        16 juillet 2019 à 12:09:59

        Ton code est incorrect car tu confonds comparaison et affectation. Ce n'est pas rmove == 2 mais rmove = 2. Et même ceci corrigé, ça ne marchera pas à cause de ta suite de if au lieu d'une suite de elif.

        Attention qu'a priori (*) tu dois parcourir deux fois la liste des déplacements aller (car il faut inverser donc le début de la réponse dépend de la fin des entrées), or ce n'est pas ce que ton code fait.

        Secondaire :

        • nul besoin de stocker la liste des déplacements inverses donc la liste chemin n'est pas utile.

        • on n'est pas obligé de convertir chaque entrée en entier (sauf n).

        Sinon, joli petit exo, que je réutiliserai.

        (*) en réalité, il me semble qu'avec une fonction récursive, on peut ne faire aucun stockage des entrées.

        -
        Edité par PascalOrtiz 16 juillet 2019 à 13:53:25

        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2019 à 12:06:17

          Merci pour vos bon conseils, il me reste de nombreuse zone d ombre je vais y travailler .

          exercice résolu avec ce code : 

          rmove=0
          totalmove=int(input())
          chemin = [0]*totalmove
          for loop in range(totalmove):
             move=int(input())
             if move == 1:
                rmove = 2
             if move == 2:
                rmove = 1
             if move == 4:
                rmove = 5
             if move == 5:
                rmove = 4
             if move ==3:
                rmove = 3
             chemin[loop]=rmove
          for retour in range(totalmove-1, -1,-1):
             print(chemin[retour])

          la correction proposé est :

          deplacementInverse = [0, 2, 1, 3, 5, 4]
          nbDeplacements = int(input())
          chemin = [0] * nbDeplacements
          for numero in range(nbDeplacements):
             chemin[numero] = int(input())
          for numero in range(nbDeplacements-1, -1, -1):
             deplacement = chemin[numero]
             print(deplacementInverse[deplacement])




          • Partager sur Facebook
          • Partager sur Twitter
            17 juillet 2019 à 12:48:04

            Ton code est correct mais attention à ne pas confondre une suite de if et une suite d'alternatives if/elif. Concernant la fin du programme, il est plus simple d'inverser via chemin[::-1]. La correction avec sa liste deplacementInverse est une solution plus élégante que de faire une suite de if/elif.

            Pour le fun:

            from sys import stdin
            input()
            print(*[(lambda x:'1' if x=='2' else '2' if x=='1' else '4' if x=='5' else '5' if x=='4' else '3')(d) for d in stdin.read().strip().split()[::-1]], sep='\n')
            
            • Partager sur Facebook
            • Partager sur Twitter

            petit probleme sur 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