Solo pude encontrar desafíos de código de golf para Mastermind, así que aquí hay una versión de desafío de código que me hubiera gustado asumir.
Koyama y Lai encontraron una estrategia óptima para el juego Mastermind normal, MM (4,6) en 1993, con un número promedio de conjeturas = 5625/1296 ~ 4.34. MM (5,8) aún no se ha resuelto, pero se estima que tiene un número promedio de conjeturas ~ 5.5.
Su tarea es crear una estrategia MM (5,8), es decir, para 5 agujeros y 8 colores, que cubra todas las pow(8,5) = 32768
posibles soluciones distintas. Obviamente, no tiene que ser óptimo. Tienes dos opciones:
- Publique un programa determinista que genere la estrategia. El programa debe ser compilable / ejecutable en Windows 7, Mac OS X o Linux sin ningún software adicional no libre.
- Publique su estrategia (junto con su nombre de StackExchange) en algún lugar de Internet y publique la URL aquí.
En ambos casos, indique el puntaje (ver abajo) en el encabezado de la respuesta.
La estrategia debe codificarse de acuerdo con la siguiente gramática:
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'
El algoritmo utilizado para decidir el número de clavijas de teclas en blanco y negro se describe en http://en.wikipedia.org/wiki/Mastermind_(board_game)
Tenga en cuenta que la respuesta "50" (es decir, la suposición correcta) está implícita y no forma parte de la gramática.
Puntuación: N = la suma del número de conjeturas para cada una de las 32768 rutas / soluciones. La estrategia con la N más baja gana. Primer desempate: el número máximo más bajo de conjeturas. Segundo tie-break: la primera respuesta publicada. La competencia termina el 1 de agosto de 2014 a las 0:00 GMT .
Un ejemplo de una estrategia para MM (2,3) con puntaje = 21:
{AB:{10:{AC:{10:AA,01:CB,00:BB}},02:BA,01:{BC:{01:CA}},00:CC}}
Usando esta estrategia, los 9 juegos posibles serán así:
- 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
Pronto publicaré un verificador de estrategia MM (5,8) basado en Java para su conveniencia.
fuente
{AB:{10|01:BB}}
? Tengo una respuesta, pero es bastante ingenua y, debido a la estructura de árbol de la gramática, no se escala bien en absoluto (4 agujeros, 3 colores, genera una estrategia de 147 MB, que podría reducir significativamente combinando partes de el árbol).Respuestas:
Java
Mi algoritmo para puntajes MM (5,8) con
177902178006182798182697 con una profundidad máxima de89 y solo necesita unos segundos (en mi computadora lenta).Un resultado de ejemplo de una estrategia para MM (2,3) con puntaje = 21 encontrado por este algoritmo se ve así:
No hay nada emocionante con mi algoritmo. No invento. Simplemente seguí las recetas encontradas en la red y las comprimí en este código Java. La única optimización que hice fue tratar de optimizar las líneas de código (de alguna manera). Dice así:
@ MrBackend: Supongo que escribir un verificador es difícil. ;-)
Algunas observaciones:
La estrategia para
MM(5,8)
se puede encontrar aquí . GitHub tiene algunos problemas para mostrar líneas tan largas, así que haga clic en el botón Sin formato .fuente
Rubí
EDITAR: se agregó algo de lógica para excluir conjeturas imposibles. Por lo tanto, las estrategias ahora cumplen con el formato dado y son mucho más manejables.
Así que aquí hay un intento de poner esto en marcha. Es bastante ingenuo (y no muy legible; ayuda leer la rama if / elsif / else de abajo hacia arriba).
En primer lugar, trato 5 de cada color:
AAAAA
,BBBBB
, etc. A partir de esa cifra que qué colores se utilizan realmente en el patrón. Y luego simplemente intento todas las permutaciones de los colores dados, omitiendo los que ya han sido descartados por las clavijas negras.Aquí está el
MM(2,3)
estrategia:La estrategia para
MM(5,8)
toma 376 KB y se puede encontrar aquí . GitHub tiene algunos problemas para mostrar líneas tan largas, así que haga clic en el botón Sin formato .Ahora, si obtengo un verificador, también puedo decirte cuál es mi puntaje real. :)
fuente