# ========================================================================================= # Problème de logique : les 5 sportifs chez le médecin # Résolution du problème par force brute # nsi.gecif.net # Décembre 2024 # ========================================================================================= """ L'énoncé du problème est le suivant : Cinq sportifs sont dans la salle d'attente d'un médecin spécialisé. Retrouvez grâce aux indications suivantes leur ordre d'arrivée, le sport pratiqué par chacun ainsi que la raison médicale de leur présence (le motif de consultation). - Jean qui est arrivé en dernier, ne pratique ni la gymnastique ni le basket. Il ne vient pas se faire établir un certificat - Christian, venu pour un soin, ne pratique pas non plus la gymnastique - Grégoire, qui est arrivé avant Laurent mais après celui qui pratique la gymnastique fait du patinage. Il n'est venu ni pour un certificat, ni chercher un renouvellement d'ordonnance - Celui qui pratique le football est arrivé le troisième, avant Christian. Il est venu chercher une dispense - Remi est un sportif, le rugby est un sport, et la visite est un motif de consultation """ from itertools import * # ############################################################################################## # Fonction solution() # ############################################################################################## def solution(tableau): # la fonction solution compare le tableau passé en paramètre à l'énnoncé du problème : # elle renvoie True si le tableau correspond en tout point à la problématique, False dans le cas contraire """ En décortiquant l'énoncé on obtient 12 conditions simples : 1 - Jean est arrivé en dernier 2 - Jean ne pratique ni la gymnastique ni le basket 3 - Jean ne vient pas se faire établir un certificat 4 - Christian vient pour un soin 5 - Christian ne pratique pas la gymnastique 6 - Grégoire est arrivé avant Laurent 7 - Grégoire est arrivé après celui qui pratique la gymnastique 8 - Grégoire fait du patinage 9 - Grégoire n'est venu ni pour un certificat, ni chercher un renouvellement d'ordonnance 10 - Le troisième pratique le football 11 - Le troisième est arrivé avant Christian 12 - Le troisième est venu chercher une dispense """ # ========================================================================================= # CONDITION 1 : # Jean est arrivé en dernier : for i in range(5): # si l'ordre d'arrivée de Jean n'est pas 5 on retourne False : if tableau[i]['prenom']=='jean' and tableau[i]['ordre']!=5: return False # ========================================================================================= # CONDITION 2 : # Jean ne pratique ni la gymnastique ni le basket for i in range(5): if tableau[i]['prenom']=='jean' and (tableau[i]['sport']=='gymnastique' or tableau[i]['sport']=='basket'): return False # ========================================================================================= # CONDITION 3 : # Jean ne vient pas se faire établir un certificat for i in range(5): if tableau[i]['prenom']=='jean' and tableau[i]['motif']=='certificat': return False # ========================================================================================= # CONDITION 4 : # Christian vient pour un soin for i in range(5): if tableau[i]['prenom']=='christian' and tableau[i]['motif']!='soin': return False # ========================================================================================= # CONDITION 5 : # Christian ne pratique pas la gymnastique for i in range(5): if tableau[i]['prenom']=='christian' and tableau[i]['sport']=='gymnastique': return False # ========================================================================================= # CONDITION 6 : # Grégoire est arrivé avant Laurent # cherchons l'ordre d'arrivée de Grégoire : for i in range(5): if tableau[i]['prenom']=='gregoire': ordre_gregoire=tableau[i]['ordre'] # cherchons l'ordre d'arrivée de Laurent : for i in range(5): if tableau[i]['prenom']=='laurent': ordre_laurent=tableau[i]['ordre'] # testons l'ordre d'arrivée de ces 2 sportifs : if ordre_gregoire>ordre_laurent: return False # ========================================================================================= # CONDITION 7 : # Grégoire est arrivé après celui qui pratique la gymnastique # cherchons l'ordre d'arrivée de Grégoire : for i in range(5): if tableau[i]['prenom']=='gregoire': ordre_gregoire=tableau[i]['ordre'] # cherchons l'ordre d'arrivée de celui qui pratique la gymnastique : for i in range(5): if tableau[i]['sport']=='gymnastique': ordre_gymnastique=tableau[i]['ordre'] # testons l'ordre d'arrivée de ces 2 sportifs : if ordre_gregoire