Partage
  • Partager sur Facebook
  • Partager sur Twitter

Devinette : Martine va au marché

Sujet résolu
    30 octobre 2014 à 15:22:31

    Martine va au marché , elle dispose d'un budget infini et peut acheter autant de fruits, légumes ,poissons,viandes
    etc.  qu'elle veut , de façon aléatoire.
    Martine ne connait pas  de recettes, et expérimente au pif.
    Donc admettons qu' il puisse il y avoir entre 2 et 10 ingrédients différents dans sa marmitte , chacun ajouté en
    raison  'd' une mesure' à '5 mesures' maximum.
    Martine goûte ensuite sa préparation :
    Si son mélange n' est pas répertorié dans le livre de recette de sa grand-mère, le résultat est MAUVAIS.
    Si son mélange correspond au bon nombre d'ingrédients,de nature exacte , et en bon dosage pour chaque
    ingrédient,  le résultat est BON.
    Exemple :
    On obtient une recette_X = {'Ingredient_1':quantitee_1,'Ingredient_2':quantitee_2,etc.} que l' on
    compare à dico_mixture_martine.
    On aurait ainsi dans le dico_livre_recette , la recette 'coq_au_vin' ===> {'poulet':1,'vin':3,'Cube_Knor':1}
    Les unités de poids sont 'standards et uniformes'. Il n'y a pas de piège.
    Comment écririez vous cela ?

    -
    Edité par buffalo974 30 octobre 2014 à 15:29:04

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      30 octobre 2014 à 16:30:01

      Salut, je comprends pas trop le délire, je dirais resultat = "bon" if mixture in recettes.values() else "mauvais".

      • Partager sur Facebook
      • Partager sur Twitter
        30 octobre 2014 à 16:52:48

        Par extension , cet algorithme permettrait de dire quelle recette on peut faire avec un panier que l'on utilise

        intégralement , ou si la mixture ne correspond à rien de correct.

        L' exemple d'une recette gastronomique est parlante, mais ceci pourrait être remplacé par des dosages de

        matériaux de construction BTP par exemple (tant de sable, tant de graviers , etc.).

        -
        Edité par buffalo974 30 octobre 2014 à 16:53:22

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          30 octobre 2014 à 17:01:06

          Tu pourrais faire un truc comme ça:

          import random
          
          INGREDIENTS = [
              'poulet', 'vin', 'bouillon en cube', 'quenelle', 'Nutella',
              'farine', 'oeuf', 'thym', 'patate', 'café', 'chocolat'
          ]
          
          RECETTES = {
              'du coq au vin': {
                  'poulet': 1,
                  'vin': 3,
                  'bouillon en cube': 1
              },
              'des quenelles au Nutella': {
                  'quenelle': 2,
                  'Nutella': 1
              }
          }
          
          
          def isdegueulasse(recette):
              return recette not in RECETTES.values()
          
          
          def generer_recette():
              nb_ing = random.randint(2, 10)
              recette = {}
              while len(recette) < 2:
                  recette = {}
                  for ing in range(nb_ing):
                      recette[random.choice(INGREDIENTS)] = random.randint(1, 5)
              return recette
          
          
          recette_martine = generer_recette()
          while isdegueulasse(recette_martine):
              print(recette_martine)
              recette_martine = generer_recette()
          print('Miam, ce soir on mange {} !'.format(
              [
                  recette_nom for recette_nom in RECETTES if RECETTES[recette_nom] == recette_martine
              ][0]
          ))

          J'suis pas sûr d'avoir tout compris mais bon je tente.

          Sinon bien joué pour la photo :lol:.

          Edit: compacté return True if recette not in RECETTES.values() else False en return recette not in RECETTES.values().

          -
          Edité par Anonyme 30 octobre 2014 à 21:44:09

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            30 octobre 2014 à 17:02:58

            Je comprends le problème et son domaine d'application, mais je comprends pas où est le défi, il suffit de faire un simple test comme dans mon message pour répondre à ta question. Disons que je ne saisis pas bien l'intérêt d'enrober une question aussi simple dans une histoire aussi longue. ^^ Il s'agit ici juste de regarder si un dico est dans un autre dico ou non, se poser la question de savoir combien de bonne recettes on peut faire aurait été plus intéressant que simplement se poser la question de savoir si une recette est bonne ou pas, comme le sous-entends la fin de ton message.

            Au final, je ne suis même pas sur que tu ais posée la question que tu voulais.

            • Partager sur Facebook
            • Partager sur Twitter
              30 octobre 2014 à 17:56:32

              Telle qu'elle est posée, la réponse à la question est un simple test comme dit plus haut.

              Maintenant j'avais eu la même idée pour un catalogue de cocktails. On indique quels sont les liquides à disposition et le code donne toutes les recettes disponibles. Dans ce cas un test "in" ne suffit pas. 

              C'est peut être ce que demande le PO.

              • Partager sur Facebook
              • Partager sur Twitter

              Python c'est bon, mangez-en. 

                31 octobre 2014 à 3:57:12

                Merci Alpha pour ton code.

                L' idée de josmiley m' intéresse maintenant , je la voit comme une aide à l' utilisateur , là ou le code d' Alphazeta permettait de controller un

                résultat. C'est complémentaire non ?

                @ @dri1 : quand c'est enrobé c'est meilleur !

                edit: @josmiley: tu l' as finalement codé ton prog sur les cocktails ?

                -
                Edité par buffalo974 31 octobre 2014 à 6:57:32

                • Partager sur Facebook
                • Partager sur Twitter
                  31 octobre 2014 à 9:34:57

                  buffalo974 a écrit:

                  edit: @josmiley: tu l' as finalement codé ton prog sur les cocktails ?



                  heu... non, je ne sais plus pourquoi.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Python c'est bon, mangez-en. 

                  Anonyme
                    31 octobre 2014 à 12:30:36

                    Bon, je m'ennuie aujourd'hui donc voilà un autre code, sur la lignée de l'idée d'@dri1:

                    import random
                    
                    INGREDIENTS = [
                        'poulet', 'vin', 'bouillon en cube', 'quenelle', 'Nutella',
                        'farine', 'oeuf', 'thym', 'patate', 'café', 'chocolat'
                    ]
                    
                    RECETTES = {
                        'du coq au vin': {
                            'poulet': 1,
                            'vin': 3,
                            'bouillon en cube': 1
                        },
                        'des quenelles au Nutella': {
                            'quenelle': 2,
                            'Nutella': 1
                        }
                    }
                    
                    
                    def isdegueulasse(recette):
                        return True if recette not in RECETTES.values() else False
                    
                    
                    def generer_recette():
                        nb_ing = random.randint(2, 10)
                        recette = {}
                        while len(recette) < 2:
                            recette = {}
                            for ing in range(nb_ing):
                                recette[random.choice(INGREDIENTS)] = random.randint(1, 5)
                        return recette
                    
                    def recettes_possibles(ingredients):
                        possibles = list(RECETTES.values())
                        for recette in RECETTES.values():
                            for ing, qt in recette.items():
                                try:
                                    if not ((ing in ingredients.values()) or (qt <= ingredients[ing])):
                                        raise KeyError('ing not in ingredients')
                                except KeyError:
                                        possibles.remove(recette)
                                        break
                        return possibles
                    
                    def obtenir_nom(recette):
                        try:
                            return [recette_nom for recette_nom in RECETTES
                                    if RECETTES[recette_nom] == recette][0]
                        except IndexError:
                            print("Cette recette n'a pas de nom...")
                    
                    while True:
                        recette_martine = generer_recette()
                        if not isdegueulasse(recette_martine):
                            print("Miam, ce soir on mange {} !".format(obtenir_nom(recette_martine)))
                            input()
                        else:
                            restes = recettes_possibles(recette_martine)
                            if restes:
                                recette = random.choice(restes)
                                print("Miam, ce soir on mange {} !".format(obtenir_nom(recette)))
                            else:
                                print("Ce soir on crève la dalle.")
                        input(recette_martine)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Devinette : Martine va au marché

                    × 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