Tu objetivo es escribir un programa que resuelva cualquier rompecabezas de Mastermind en 6 o menos movimientos.
Fondo
Mastermind es un juego de mesa. El objetivo del juego es adivinar exactamente la combinación (colores y orden) de 4 clavijas de colores ocultas por el otro jugador. Cuando se hace una suposición, el otro jugador responde con entre 0 y 4 clavijas blancas o rojas. Una clavija roja es donde el color y la ubicación son correctos. Una clavija blanca es donde se representa el color en las piezas restantes, pero está en la ubicación incorrecta. Si hay colores duplicados en la suposición, solo se otorgará una clavija por color correspondiente en el secreto. (Entonces, si el secreto contenía 1 Azul, y la suposición tenía 2 azules con uno en la ubicación correcta, se daría una clavija roja). Hay 6 colores diferentes y se pueden usar duplicados.
Entonces, por ejemplo, un juego podría ser el siguiente: (Suponiendo que la solución es Rojo Verde Verde Azul)
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
Las reglas se expanden en Wikipedia.
Requisitos
- El programa debe leer desde stdin y escribir en stdout
- Usaré números por simplicidad en lugar de colores. La combinación para adivinar será 4 números entre 1 y 6
Deben generar sus conjeturas como una serie de 4 números separados por espacios del 1 al 6 que concluyen con una nueva línea. Por ejemplo:
1 5 2 2 \ n
El programa recibirá posteriormente como entrada después de su conjetura 2 enteros entre 0 y 4 separados por un espacio y concluyendo con una nueva línea. El primero será la cantidad de clavijas blancas, el segundo la cantidad de clavijas rojas.
- En una entrada de "0 4" (4 clavijas rojas), el programa debe terminar
- El programa debe ser capaz de resolver cualquier rompecabezas en menos de 6 turnos (el programa que da salida, seguido de la entrada de respuesta es 1 turno). No hay bonificación (debido a la complejidad de la prueba) por poder resolverlo en menos.
- La solución debe ser completamente interna e incluida en la fuente. Solo se permiten bibliotecas estándar. Por lo tanto, la solución puede no depender de ningún otro archivo (como diccionarios) o Internet.
Ejemplo de entrada / salida
> 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
Tanteo
- Esto es puro y simple Code Golf . La solución más corta en bytes gana.
Esta es mi primera pregunta de Code Golf. Pido disculpas si he hecho algo mal, pero he intentado lo mejor posible para asegurarme de que no haya absolutamente ninguna ambigüedad y evitar la mayor cantidad posible de reglas de abogacía. Si he sido ambiguo o poco claro, no dude en hacer preguntas.
1 2 3 4volver0 1?