Outils pour utilisateurs

Outils du site


nsi:tds:jeux:mastermind

Mastermind

Le jeu de Mastermind se joue a deux.

  • Le joueur 1 choisit un code de 5 items, caché.
  • Ce code est composé de lettres, de A à H.
    Par exemple EFAAB est un code possible.
  • Le joueur 2 doit faire des essais pour deviner le code.
  • À chaque proposition du joueur 2, le joueur 1 répond en indiquant pour chaque item :
    • 2 s'il est bien placé,
    • 1 s'il mal placé
    • 0 s'il n'est pas dans le code.

Exemples de réponses possibles

  • Si code = "EFAAB" et proposition = "AFBBC" alors reponse = "12100"
  • Si code = "EFAAA" et proposition = "AAFAD" alors reponse = "10120"

À faire

  1. Écrire une fonction test_code(bon_code,essai_code) qui reçoit bon_code et essai_code et qui renvoie la réponse indiquant ce qui est bon, mauvais, mal placé. explications ci-dessous !
  2. Testez
  3. Écrire une une fonction code_aleatoire() qui génère un code au hasard
    Utilisez la bibliothèque random.
  4. Écrire le programme qui exécute une partie :
    • choix du code aléatoirement par la machine,
    • demande à l'utilisateur de saisir un essai de code,
    • test du code proposé,
    • affichage du résultat du test, et cela en boucle jusqu'à ce que le bon code soit trouvé.

Pour aider à faire test_code qui n'est pas simple…

  • écrire une fonction replace_at_index(chaine, car, index) qui reçoit une chaîne et un indice et qui remplace le caractère à l'indice donné par car.
  • Il faut faire 2 passages :
    • un premier passage pour repérer les caractères bien placés
    • un 2e passage pour repérer les caractères mal placés.
  • On commence avec la réponse "00000"
  • 1er passage, pour chaque caractère de bon_code, on regarde s'il correspond à son vis à vis dans essai_code.
    • Si c'est le cas, on remplace dans la réponse le 0 correspondant par 2 et dans bon_code et essai_code on remplace le caractère correspondant par _.
    • Sinon on ne fait rien.
  • 2e passage : Pour chaque caractère de essai_code différent de _, on regarde s'il est présent dans bon_code. Si oui, on remplace le 0 correspondant par 1 et les caractères correspondant par _.

Exemple d'exécution : bon_code = "AAFBG" ; essai_code = "CAAFG".

La réponse devrait être "02112".

action bon_code essai_code réponse
initialisation AAFBG CAAFG 00000
début 1er passage
lecture A dans bon_code : pas bien AAFBG CAAFG 00000
lecture A dans bon_code : bien A_FBG C_AFG 02000
lecture F dans bon_code : pas bien A_FBG C_AFG 02000
lecture B dans bon_code : pas bien A_FBG C_AFG 02000
lecture G dans bon_code : bien A_FB_ C_AF_ 02002
2e passage…
lecture C dans essai_code, absent de bon_code A_FB_ C_AF_ 02002
lecture A dans essai_code, présent dans bon_code __FB_ C__F_ 02102
lecture F dans essai_code, présent dans bon_code ___B_ C____ 02112

On renvoie donc "02112".

nsi/tds/jeux/mastermind.txt · Dernière modification : de goupillwiki