Skip to article frontmatterSkip to article content

Licence CC BY-NC-ND, Thierry Parmentelat

inspiré d’un jeu télévisé; pour ceux qui ne connaissent pas les règles, on parle d’un jeu qui s’insipre un peu du mastermind, mais avec des mots; il s’agit de trouver un mot caché, on essaie un mot et en réponse on nous dit si chaque lettre est présente et/ou bien placée.

pour plus de détails sur ce jeu, voyez https://fr.wikipedia.org/wiki/Motus_(jeu_télévisé)

les règles

voici un exemple de session, le mot à deviner était CITRON

ici on a

les codes de couleur sont donc

petite subtilité

il faut préciser un peu ce qu’il se passe lorsque l’un des deux mots (le caché, ou la tentative) contient des lettres en double

la règle est que on commence par donner autant de rouges que possible, puis ces lettres-là sont enlevées du décompte; puis on donne ensuite autant de jaunes que possible, et à chaque fois les lettres sont enlevées du décompte;

c’est ainsi que par exemple, avec le mot caché addition on obtient la correction suivante (la dernière ligne est uniquement explicative)

vous remarquez que la réponse contient un d bleu, alors qu’il y a deux d dans le mot à deviner, mais comme ils ont déjà été ‘consommés’ pour les deux d rouges, le troisième d est considéré comme absent.

autre exemple, le mot caché est escarcelle

vous remarquez que la réponse contient

ce qui signifie entre autres qu’il ne suffit pas trouver une lettre en bleu dans la réponse pour en déduire qu’elle n’est pas présente dans le mot, comme ce contrexemple nous le montre bien

ce qui est fourni

dans le zip vous trouverez

# FYI this data comes from this URL
from pathlib import Path 

print(Path("data/ods6.url").open().read())
http://www.3zsoftware.com/listes/ods6.zip

étape 1: l’ordi anime le jeu

dans un premier temps:

on lance le jeu avec

python main.py

étape 2: on lui passe un paramètre

ça peut être utile, au moins pour le debug, de pouvoir choisir le mot caché, c’est-à-dire de pouvoir lancer

python motus.py citron

ça vous fera gagner du temps pour la suite

étape 3: debugging

en fait si vous rejouez les exemples ci-dessus, surtout avec les lettres multiples, vous allez voir que le code de motus.py est un peu buggé, votre mission est de le corriger

étape 4: de l’aide

en option, l’humain peut demander à l’ordi un indice; à vous de voir, on peut imaginer par exemple

discussion: refactoring ?

on voudrait maintenant que l’ordi puisse indifféremment:

est-ce que le code est bien adapté pour ça ?
sinon comment le restructurer pour ce type d’usages ?

une librairie utile: colorama

pour l’affichage j’ai utilisé ci-dessus la librairie colorama, voici quelques exemples, cherchez la documentation si vous avez besoin de plus de détails

# as you can see in the doc, windows users will probably need to do this
from colorama import just_fix_windows_console
just_fix_windows_console()
from colorama import Back, Style
# on peut l'utiliser comme ceci
print(f"{Back.RED} C  I {Back.YELLOW} N {Back.BLUE} E M A {Style.RESET_ALL}")
 C  I  N  E M A 
# ou encore
from colorama import Back, Style
print(f"{Back.RED} C {Style.RESET_ALL} {Back.RED} I {Style.RESET_ALL} "
      f"{Back.YELLOW} N {Style.RESET_ALL} {Back.BLUE} E {Style.RESET_ALL} "
      f"{Back.YELLOW} M {Style.RESET_ALL} {Back.YELLOW} A {Style.RESET_ALL}")
 C   I   N   E   M   A