Mastermind

Étape 1

Pour ce projet, nous allons nous intéresser au Mastermind. Dans ce jeu, un joueur doit deviner un code formé de jetons de couleurs élaboré par un autre joueur, et ce en le plus petit nombre d'essais possible. Après chaque essai, le joueur qui a conçu le code donne des indications sur les jetons bien placés ou de la bonne couleur mais mal placés à l'autre joueur.

Photo taken by User:ZeroOne - Own work, CC BY-SA 2.0

Mise en place du jeu

Au début du jeu, un des deux joueur élabore un code qu'il note et cache à la vue de l'autre joueur.

Le code est une suite de jetons de couleurs. Selon les règles standard du jeu, les codes sont formés de 4 jetons, et il y a 6 couleurs de jetons possibles. Il est possible que des couleurs se répètent au sein d'un même jeu.

Déroulement

Ensuite, et jusqu'à ce qu'il trouve la bonne solution, le joueur qui doit deviner le code fait une proposition de code. L'autre joueur lui indique ensuite combien de jetons sont bien placés, et combien de jetons sont de la bonne couleur mais mal placés. Pour ce faire, le joueur utilise des pions rouges (bien placés) et blancs (mal placés). La position des pions n'apporte aucune indication sur la position des jetons bien ou mal placés.

Le décompte des pions rouges est relativement simple : Il suffit de compter combien de jetons sont de la bonne couleur et à la bonne position.

Pour les pions blancs, la logique est un peu plus complexe. Les pions blancs comptent le nombre de jetons correctement placés supplémentaires qu'il serait possible d'obtenir au maximum par permutation des jetons du code.

Fichiers du projet

Pour ce projet, un ensemble de fichiers vous est fourni. Cliquez sur le lien ci-dessous pour les télécharger.

Télécharger les fichiers du projet.

Une fois l'archive téléchargée, ouvrez-la et déplacez-les fichiers sur votre espace de stockage persistant dans le dossier projets/mastermind.

Les fichiers sont les suivants :

Ces trois fichiers sont à mettre dans votre dossier projets/connect4. Pour cette première étape, nous allons principalement modifier le fichier state.py. Le fichier solver.py sera le sujet de l'étape suivante.

Modélisation des codes

Avant toute chose, nous devons réflechir à la façon dont nous allons représenter les codes en Python.

La solution suggérée pour ce projet est d'utiliser une liste de nombres. La longueur de la liste correspondra à la longueur du code. Chaque nombre de la liste correspondra à une couleur (1 pour la première couleur, 2 pour la suivante et ainsi de suite).

Instructions détailées

Pour cette première étape, vous allez devoir implémenter la fonction get_pegs pour compter le nombre de pions blancs et rouges étant donné le code proposé et la solution recherchée.

def get_pegs(candidate, solution):
    pass

La fonction doit retourner une paire de deux nombres entiers. Le premier représente le nombre de pions rouges, le second le nombre de pions blancs.

Détermination du nombre de pions rouges

Le nombre de pions rouge correspond au nombre de positions où à la fois le code proposé et la solution recherchée ont la même couleur.

Détermination du nombre de pions blancs

Le nombre de pions blancs doit correspondre au nombre de jetons qui peuvent être placés à la bonne position dans le code. Bien entendu, un jeton ne peut pas être placé à la position d'un autre pion déjà bien placé.

Indice : Les jetons bien placés peuvent être complètement ignorés à cette étape. Il est parfois plus simple de les supprimer à la fois du code proposé et de la solution recherchée dans le contexte de cette détermination.

Indice : Une fois un jeton mal placé mis à la bonne position, il est intéressant de le supprimer du code proposé et de la solution pour continuer le décompte.

Dans la prochaine étape, vous essaierez de concevoir une IA pour déterminer quel est le meilleur code à tenter étant donné une liste de codes possibles.

Essayer votre code

Pour essayer votre code, exécutez le script main.py. Dans un premier temps, il vous sera demandé de façon cachée de concevoir un code. Pour cela, entrez 4 nombres entiers entre 1 et 6 séparés par des espaces. Ensuite, passez l'ordinateur à l'autre joueur, qui devra rentrer ses essais de la même manière. Après chaque essai, les pions rouges et blancs sont indiqués directement.

Vous pouvez changer le comportement de ce script main.py en modifiant le code à la toute fin du fichier. Vous pouvez ainsi choisir de laisser l'ordinateur choisir un code au hasard, ou bien de ne pas indiquer de code. Dans ce dernier cas, ce sera à vous d'indiquer les pions rouges et blancs.