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

Algorithmes et structures de données Discussion :

Demande solution Citizen Code S01 E07 Les conserves


Sujet :

Algorithmes et structures de données

  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,

    J'ai besoin de l'algorithme de solution du problème indiqué dans l'image jointe.

    J'ai les contraintes suivantes:
    - le plus court possible
    - utilisant des boucles imbriquées
    - il n'est pas possible d'utiliser ailleurs l'indice de boucle (exemple Python: For ma_variable2 in range(ma_variable1)
    - il n'est pas possible de créer de variable à décrémenter

    Pour information:
    L'algorithme me suffit
    J'ai déjà le code en Python, dans lequel il est autorisé de reprendre l'indice de boucle.
    Je cherche la solution en Python noCode "Blockly" (source de l'exercice: https://www.futureengineer.fr/)
    Les instructions disponibles sont dans la colonne de droite; l'avant-dernier bloc sert à créer un test comme "si hauteurColonne == 0"
    Merci
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 276
    Points : 13 553
    Points
    13 553
    Par défaut
    Bonjour

    Qu'as-tu essayé ?

    Pourquoi le forum developpez.com casserait les énigmes du site machin.fr ?

  3. #3
    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
    Bonsoir Flodelarab,

    J'ai écrit le code suivant en Python, transposable en Python noCode "Blockly" (cf image jointe)

    J'ai résolu tout seul 168 des 170 énigmes du site indiqué.

    Comme je ne parviens pas à trouver de solution au problème indiqué, et que je veux savoir où je réfléchis mal, je demande de l'aide.

    Comme je l'ai dit, j'ai plusieurs solutions, mais toutes trop longues (ie consommant plus de "blocs" que les 20 autorisés):
    - déplacer 4 lignes (ou colonnes) entières, sauf 1, 2, 3 boîtes de Petits Pois (comment décrémenter?)
    - déplacer 4 lignes (ou colonnes) entières, puis renvoyer 1, 2, 3 boîtes de Petits Pois (comment décrémenter?)
    - écrire le pseudocode en commençant par la fin (la boucle prendre-poser)

    Je pense que la solution repose sur l'utilisation du 'capteur' hauteurColonne (si hauteurColonne = 4, puis 3, etc.), mais les tests mènent à une solution trop longue.

    Je le répète, l'algorithme me suffit, à condition qu'il soit constitué de boucles imbriquées, sans variable autre que l'indice de boucle.

    Merci de me donner au moins une idée.
    Bonne soirée
    Images attachées Images attachées  

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 276
    Points : 13 553
    Points
    13 553
    Par défaut
    Ne trouves-tu pas ton code redondant ? Comment fait-on en informatique quand un même code est exécuté plusieurs fois ?
    Note : il existe bien une solution. Je l'ai trouvée. Courage
    Note 2 : le site a de sérieux bugs d'affichage.

  5. #5
    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 Flodelarab,

    Ne trouves-tu pas ton code redondant ?
    Oui, mon code est redondant!
    la boucle "prendre-gauche-poser-droite" est répétée 4 fois!
    les boucles des lignes 3 à 8, 9 à 14, 15 à 20 sont similaires, à la décrémentation près!

    Comment fait-on en informatique quand un même code est exécuté plusieurs fois ?
    On crée une fonction (une sub-routine) qu'on appelle autant de fois que voulu,
    Je n'ai pas le moyen de créer de sous-programme!

    Je n'ai pas le moyen de décrémenter de variable pour effectuer la même boucle sur 4, puis 3, puis 2, puis 1 boîte (en Python: For ma_variable in range(début, fin, pas), soit: For ma_variable (4,0,-1)

    le thème est "imbrication". J'essaie de m'en sortir en imbriquant des boucles, mais ça implique des tests gourmands!

    j'y retourne,
    Bonne journée

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 276
    Points : 13 553
    Points
    13 553
    Par défaut
    Citation Envoyé par Mintzalagun64 Voir le message
    On crée une fonction (une sub-routine)
    Euh ... non. La fonction, ou sous-routine, sert à donner un nom à un bloc. Regarde le langage de programmation Brainfuck : on ne peut pas faire de fonction mais on peut faire des répétitions. Grâce à ...?

    Citation Envoyé par Mintzalagun64 Voir le message
    Je n'ai pas le moyen de décrémenter de variable
    Mais peux-tu rendre inopérant l'action de la boucle (de taille fixe de 4 tours) ?

    Citation Envoyé par Mintzalagun64 Voir le message
    le thème est "imbrication".
    La réponse est donc dans la question.

    Citation Envoyé par Mintzalagun64 Voir le message
    ça implique des tests gourmands!
    Si tu as vraiment des boucles imbriquées, il ne devrait pas y avoir tant de tests que ça.

  7. #7
    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
    Flordelarab,

    j'essaie de résoudre le problème à partir d'une configuration minimale, déplacer (ligne, colonne): 5,11 en 1,7, puis 5,10 et 4,10 en 1,6 et 2,6.
    Si je parviens à résoudre ça,...

    on ne peut pas faire de fonction mais on peut faire des répétitions. Grâce à ...?
    Déjà merci pour l'information sur Brainfuck. Je suis allé voir sur Wikipedia.
    On peut faire des répétitions grâce aux boucles FOR (quand on connaît la limite) [ou WHILE, tant qu'un condition est vérifiée]

    Bien entendu, je n'ai pas droit aux listes.

    L'idée est donc:
    faire la boucle prendre-poser 10 fois (autant qu'il y a de boîtes à déplacer)
    changer de colonne lorsqu'une certaine condition est vérifiée. Mais je ne peux pas différencier les boîtes par type. Et la hauteur utile se décrémente 4,3,2,1 boîtes restantes.

    Mais peux-tu rendre inopérant l'action de la boucle (de taille fixe de 4 tours) ?
    Là, je ne sais pas comment faire. Je n'ai pas droit à WHILE, qui admet PASS.

    j'y retourne,

  8. #8
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 276
    Points : 13 553
    Points
    13 553
    Par défaut
    Citation Envoyé par Mintzalagun64 Voir le message
    Là, je ne sais pas comment faire
    Ah ? Donc tu peux toujours prendre ? Toujours poser ? Toujours aller à gauche ? Toujours aller à droite ?

    En programmation, un avertissement (ou warning, ou exception) n'est jamais qu'un bug qu'on intercepte avant qu'il n'arrive.

  9. #9
    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
    Flodelarab,

    Ah ? Donc tu peux toujours prendre ? Toujours poser ? Toujours aller à gauche ? Toujours aller à droite ?
    poser, je peux toujours; prendre, oui tant que colonne de prise non-vide;
    aller à gauche/droite: je peux tant que je reste dans l'espace de travail

    Je pense à l'équivalent de BREAK: une boucle de déplacement avec une condition "hauteurColonne = 0" pour interrompre le déplacement

    En programmation, un avertissement (ou warning, ou exception) n'est jamais qu'un bug qu'on intercepte avant qu'il n'arrive.
    Oui, mais je n'ai aucune instruction disponible ici pour intercepter un bug. L'interpréteur de mon code affiche un message et arrête tout.

    Bonne soirée


Discussions similaires

  1. Demande solution Citizen Code S01 E07 Les publicités (Blockly)
    Par Mintzalagun64 dans le forum Général Python
    Réponses: 29
    Dernier message: 22/07/2024, 11h30
  2. Demande solution Citizen Code S01 E07 Les conserves
    Par Mintzalagun64 dans le forum Général Python
    Réponses: 7
    Dernier message: 03/06/2024, 19h07
  3. Réponses: 6
    Dernier message: 29/10/2015, 16h24
  4. Pb avec code source "lister les images d'un dossier"
    Par Mimisator dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 16h25
  5. [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, 14h02

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