Votre objectif est d'écrire un programme qui résoudra tout puzzle Mastermind en 6 mouvements ou moins.
Contexte
Mastermind est un jeu de société. Le but du jeu est de deviner exactement la combinaison (couleurs et ordre) de 4 chevilles colorées cachées par l'autre joueur. Quand une supposition est faite, l'autre joueur répond entre 0 et 4 chevilles blanches et ou rouges. Une cheville rouge est l'endroit où la couleur et l'emplacement sont corrects. Une cheville blanche est l'endroit où la couleur est représentée dans les pièces restantes, mais est au mauvais endroit. S'il y a des couleurs en double dans la supposition, il n'y aura qu'une seule cheville attribuée par couleur correspondante dans le secret. (Donc - si le secret contenait 1 bleu et que la supposition avait 2 bleus avec un au bon endroit, il y aurait une cheville rouge donnée). Il existe 6 couleurs différentes et des doublons peuvent être utilisés.
Ainsi, par exemple, un jeu peut se dérouler comme suit: (en supposant que la solution est Rouge Vert Vert Bleu)
1: Blue Purple Black Green - 2 white pegs
2: Green Red Black Blue - 2 white pegs, 1 red peg
3: Green Green Green Blue - 3 red pegs
4: Red Green Green Blue - 4 red pegs
Les règles sont développées sur Wikipedia
Exigences
- Le programme doit lire depuis stdin et écrire dans stdout
- J'utiliserai des chiffres pour plus de simplicité au lieu de couleurs. La combinaison à deviner sera 4 nombres entre 1 et 6
Ils doivent produire leurs suppositions sous la forme d'une série de 4 nombres séparés par des espaces de 1 à 6 se terminant par une nouvelle ligne. Par exemple:
1 5 2 2 \ n
Le programme recevra ensuite en entrée après sa supposition 2 entiers compris entre 0 et 4 séparés par un espace et se terminant par une nouvelle ligne. Le premier sera la quantité de chevilles blanches, le second la quantité de chevilles rouges.
- Sur une entrée de "0 4" (4 piquets rouges), le programme doit se terminer
- Le programme doit être capable de résoudre n'importe quel casse-tête en moins de 6 tours (votre programme donnant une sortie, suivi de l'entrée de réponse est de 1 tour). Il n'y a pas de bonus (en raison de la complexité de la preuve) pour pouvoir le résoudre en moins.
- La solution doit être complètement interne et incluse dans la source. Seules les bibliothèques standard sont autorisées. La solution ne peut donc pas s'appuyer sur d'autres fichiers (tels que des dictionnaires) ou sur Internet.
Exemple d'entrée / sortie
> is your programs output
< is the responding input
Solution is 1 5 6 6
> 1 2 3 4
< 0 1
> 4 1 6 6
< 1 2
> 1 6 5 6
< 2 2
> 1 5 6 6
< 0 4
Notation
- Il s'agit de Code Golf pur et simple . La solution la plus courte en octets gagne.
Ceci est ma première question sur Code Golf. Je m'excuse si j'ai fait quelque chose de mal, mais j'ai essayé au mieux de faire en sorte qu'il n'y ait absolument aucune ambiguïté et d'empêcher autant de règles que possible d'avocat. Si j'ai été ambigu ou peu clair, n'hésitez pas à poser des questions.
1 2 3 4revenir0 1?