Je ne pouvais trouver que des défis de code-golf pour Mastermind, alors voici une version de défi de code que j'aurais aimé relever moi-même.
Une stratégie optimale pour le jeu Mastermind normal, MM (4,6), a été trouvée par Koyama et Lai en 1993, avec un nombre moyen de suppositions = 5625/1296 ~ 4,34. MM (5,8) n'est toujours pas résolu, mais on estime qu'il a un nombre moyen de suppositions ~ 5,5.
Votre tâche consiste à créer une stratégie MM (5,8), c'est-à-dire pour 5 trous et 8 couleurs, couvrant toutes pow(8,5) = 32768
les solutions distinctes possibles. De toute évidence, il ne doit pas être optimal. Vous avez deux choix:
- Publiez un programme déterministe qui génère la stratégie. Le programme doit être compilable / exécutable sur Windows 7, Mac OS X ou Linux sans logiciel supplémentaire non libre.
- Publiez votre stratégie (avec votre nom StackExchange) quelque part sur Internet et publiez l'URL ici.
Dans les deux cas, indiquez le score (voir ci-dessous) dans l'en-tête de la réponse.
La stratégie doit être codée selon la grammaire suivante:
strategy : guessing-strategy | known-solution-strategy
guessing-strategy : '{' guess ':' branches '}'
known-solution-strategy : guess
guess : color color color color color
color : 'A'..'H'
branches : '{' branch (',' branch)* '}'
branch : reply ':' strategy
reply : number-of-blacks number-of-whites
number-of-blacks : number-of-key-pegs
number-of-whites : number-of-key-pegs
number-of-key-pegs : '0'..'5'
L'algorithme utilisé pour décider du nombre de chevilles de touches noir / blanc est décrit dans http://en.wikipedia.org/wiki/Mastermind_(board_game)
Notez que la réponse "50" (c'est-à-dire une supposition correcte) est implicite et ne fait pas partie de la grammaire.
Notation: N = la somme du nombre de suppositions pour chacun des 32768 chemins / solutions. La stratégie avec le N le plus bas gagne. Premier tie-break: le plus petit nombre maximum de suppositions. Deuxième bris d'égalité: la première réponse publiée. Le concours se termine le 1er août 2014 à 0h00 GMT .
Un exemple de stratégie pour MM (2,3) avec score = 21:
{AB:{10:{AC:{10:AA,01:CB,00:BB}},02:BA,01:{BC:{01:CA}},00:CC}}
En utilisant cette stratégie, les 9 jeux possibles se dérouleront comme suit:
- AB 20
- AB 10, AC 20
- AB 10, AC 10, AA 20
- AB 10, AC 01, CB 20
- AB 10, AC 00, BB 20
- AB 02, BA 20
- AB 01, BC 20
- AB 01, BC 01, CA 20
- AB 00, CC 20
Je publierai bientôt un vérificateur de stratégie MM (5,8) basé sur Java pour votre commodité.
{AB:{10|01:BB}}
? J'ai une réponse, mais elle est assez naïve et en raison de la structure arborescente de la grammaire, elle ne s'adapte pas bien du tout (4 trous, 3 couleurs, génère une stratégie de 147 Mo, que je pourrais réduire considérablement en combinant des parties de l'arbre).Réponses:
Java
Mon algorithme pour MM (5,8) marque avec
177902178006182798182697 avec une profondeur maximale de89 et n'a besoin que de quelques secondes (sur mon ordinateur lent).Un exemple de sortie d'une stratégie pour MM (2,3) avec un score = 21 trouvé par cet algorithme ressemble à ceci:
Il n'y a rien d'excitant avec mon algorithme. Aucune invention. Je viens de suivre les recettes trouvées sur le net et de les compresser dans ce code Java. La seule optimisation que j'ai faite est d'essayer d'optimiser les lignes de code (en quelque sorte). Ça va comme ça:
@MrBackend: Écrire un vérificateur est difficile, je suppose. ;-)
Quelques remarques:
La stratégie pour
MM(5,8)
peut être trouvée ici . GitHub a quelques problèmes pour afficher des lignes aussi longues, alors cliquez sur le bouton Raw .la source
Rubis
EDIT: Ajout d'une logique pour exclure les suppositions impossibles. Par conséquent, les stratégies sont désormais conformes au format donné et sont beaucoup plus faciles à gérer.
Voici donc une tentative pour faire avancer les choses. C'est assez naïf (et pas très lisible - cela aide à lire la branche if / elsif / else de bas en haut).
Tout d' abord, j'essaie 5 de chaque couleur:
AAAAA
,BBBBB
, etc. A partir de ce chiffre , je les couleurs qui sont effectivement utilisées dans le modèle. Et puis j'essaye simplement toutes les permutations des couleurs données, en omettant celles qui ont déjà été exclues par les chevilles noires.Voici la
MM(2,3)
stratégie:La stratégie pour
MM(5,8)
prend 376 Ko et peut être trouvée ici . GitHub a quelques problèmes pour afficher des lignes aussi longues, alors cliquez sur le bouton Raw .Maintenant, si je reçois un vérificateur, je peux également vous dire quel est mon score réel. :)
la source