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 à l'essai
    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
    Points : 10
    Points
    10
    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 éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 483
    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 483
    Points : 9 282
    Points
    9 282
    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
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 734
    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 734
    Points : 31 058
    Points
    31 058
    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.

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 074
    Points : 9 522
    Points
    9 522
    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 : 831
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 éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 074
    Points : 9 522
    Points
    9 522
    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
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 734
    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 734
    Points : 31 058
    Points
    31 058
    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...

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 074
    Points : 9 522
    Points
    9 522
    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 à l'essai
    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
    Points : 10
    Points
    10
    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  

+ 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