IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Demande solution Citizen Code S01 E07 Les conserves


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2024
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2024
    Messages : 19
    Par défaut Demande solution Citizen Code S01 E07 Les conserves
    Bonjour,
    Je ne parviens pas à faire l'exercice en moins de 20 blocs d'instructions. Ma proposition est fonctionnelle. Le thème de l'exercice est "imbrications".
    Veuillez trouver en pièces jointes l'énoncé, et ce que j'ai fait.

    Les instructions disponibles sont:
    droite() gauche()
    prendre() poser()
    if elif else
    hauteurColonne
    for

    Merci de m'indiquer une solution, éventuellement en pseudo-code!
    Cordialement
    JB
    Images attachées Images attachées   

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Je n'ai jamais fais ça, mais à mon avis, il faut déjà identifier chaque boite par son adresse départ (ligne, colonne) et arrivée (ligne2, colonne2)

    Par ailleurs, le codage est plus facile en Python quand les indices des lignes et des colonnes commencent par zéro.

    Enfin, il faut que l'ordre dans lequel le calcul des adresses est faite, permette au robot de prendre et déposer les boites, ce qui suppose qu'elle ne sont recouvertes par rien à chaque fois.

    Voilà comment je ferais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for ligne in range(4, 0, -1):
        for colonne in range(7, 7+ligne):
            ligne2 = 4-ligne
            colonne2 = colonne-4
            print(ligne, colonne, "===>", ligne2, colonne2)
    Ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    4 7 ===> 0 3
    4 8 ===> 0 4
    4 9 ===> 0 5
    4 10 ===> 0 6
    3 7 ===> 1 3
    3 8 ===> 1 4
    3 9 ===> 1 5
    2 7 ===> 2 3
    2 8 ===> 2 4
    1 7 ===> 3 3
    Il ne reste plus qu'à ordonner les actions prendre et déposer

    Si l'ordre à donner au robot est plus "basique" (genre "bouger d'une case à droite"), le code ci-dessus devrait être facile à adapter.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Oui ta proposition est fonctionnelle mais emplie de répétitions inutiles. Tu fais boucle(4), boucle(3) puis boucle(2). Or si on numérote les lignes depuis le bas, à la ligne 1 il y a une boite, à la ligne 2 il y en a 2, à la ligne 3 il y en a 3 bref à la ligne "n" il y aura "n" boites de tomates.
    Donc je partirais sur un for lig in range(1, 5) puis un for boite in col(1, lig+1). Ne reste qu'à trouver l'équation mathématique qui associe boite(lig, col) à boite(lig2, col2) et comme ici c'est une rotation d'angle pi/2, ça ne devrait pas être très loin de lig2=col et col2=lig.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 192
    Par défaut
    Hello,
    Tyrtamos et Sve@r vous n'avez pas tous les éléments pour répondre car Mintz ne vous a pas tout dit. Voici un début de code python qui montre comment cela fonctionne :

    Nom : Conserves.gif
Affichages : 4923
Taille : 183,2 Ko

    sachant que vous avez le droit au if et que hauteurColonne indique combien il y a d'éléments dans une colonne (A tester quand la grue est au dessus de la colonne).

    Ami calmant, J.P

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 192
    Par défaut
    Citation Envoyé par Mintzalagun64 Voir le message
    Bonjour,
    Je ne parviens pas à faire l'exercice en moins de 20 blocs d'instructions. Ma proposition est fonctionnelle. Le thème de l'exercice est "imbrications".
    Merci de m'indiquer une solution, éventuellement en pseudo-code!
    Comme on le voit dans ton code il y a des boucles qui se suivent avec pour seule différence le nombre de boucles qui se décrémente. Il suffit de rajouter une boucle par dessus qui décremente une variable qui sert à définir le nombre de fois des instructions de déplacement des boîtes ( c'est pas très claire comme explication) . Le code c'est plus facile à comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from robot import *
    for x in range(7): droite()
    for z in range(4,0,-1):
        for x in range(z):
            prendre()
            for y in range(4): gauche()
            poser()
            for y in range(4): droite()
        droite()
    A noter que l'on a pas le droit d'utiliser des variables sauf celles qui sont dans un for. (affectation de variable interdite)


    Ami calmant, J.P

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Voici un début de code python qui montre comment cela fonctionne :
    Je comprends mieux l'idée.
    Donc ce serait "répéter 4 fois un déplacement de n boites de 4 rangs vers la gauche"
    Donc (en imaginant qu'on part avec le crochet placé en colonne 11)
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for i in range(4):
        for j in range(i+1):
            prendre()
            for k in range(4): gauche()
            poser()
            for k in range(4): droite()
        # for
        gauche()
    # for
    A vue de nez ça me semble pas trop mal...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 192
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    J
    A vue de nez ça me semble pas trop mal...
    Sve@r ta solution fonctionne aussi en ajoutant en première ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for x in range(10): droite()
    pour positionner la grue en colonne 11

  8. #8
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2024
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2024
    Messages : 19
    Par défaut
    Bonjour,

    Un grand merci à tous les trois, tyrtamos, Jurassic Pork et Sve@r, pour vos réponses.

    il me reste à coder l'algorithme de tyrtamos, avec ce que vous m'avez appris (et que la documentation Citizen Code n'indique pas: ainsi, je pensais que l'instruction "For loop in range(n)" était "gravée dans le marbre").

    Bonne soirée!
    Images attachées Images attachées  

  9. #9
    Invité de passage
    Homme Profil pro
    Chirurgien Dentiste
    Inscrit en
    Janvier 2025
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chirurgien Dentiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2025
    Messages : 1
    Par défaut Demande d'aide exo du rayon
    Merci pour votre réponse pour cet exo, mais je suis bloqué sur l'exo du Rayon de la même saison.
    Mintzalagun64 si tu pouvais me donner la solution, je ne compte plus les heures a me casser la tête dessus..

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Bonjour.

    Il est inutile de venir polluer ce topic avec une question différente de celle posée.

    Votre question va manquer de visibilité et il y a peu de chances que l'on vous réponde.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 58
    Par défaut
    Bonjour,

    Avec retard, voici ma solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    from robot import *
     
    for loop in range(3):
        droite()
     
    for i in range(5):
        for j in range(4-i):
            for loop in range(4):
                droite()    
            prendre()
            for k in range(4):
                gauche()
            poser()
            droite()
        for z in range(4-i):
            gauche()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/10/2015, 15h24
  2. [IPTV - Video on demand] solutions /architectures?
    Par julseb dans le forum Vidéo
    Réponses: 1
    Dernier message: 21/11/2005, 08h57
  3. Pb avec code source "lister les images d'un dossier"
    Par Mimisator dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 15h25
  4. [JVM] interactions jvm - code : agir sur les paramètres ?
    Par pierre.zelb dans le forum Général Java
    Réponses: 6
    Dernier message: 07/07/2005, 13h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo