El Master Mind es un juego de sobremesa en el que participan
dos jugadores A y B con fichas de colores. Posiblemente ya lo conocéis;
si no, es un buen momento para aprender cómo se juega.
A imagina una combinación "objetivo" de cinco
fichas y B debe adivinarla; la posición que ocupa cada ficha en la combinación
es relevante. El jugador B va proponiendo combinaciones candidatas (también
de cinco fichas de colores), y el jugador A responde con el número de
aciertos y de aproximaciones que contiene respecto al objetivo. Se produce acierto
en cada posición de la combinación propuesta que contenga una
ficha del mismo color que la que hay en la misma posición del objetivo.
Se produce aproximación en las posiciones de la combinación propuesta
que no sean aciertos, pero sí del mismo color que alguna otra posición
del objetivo. En el siguiente ejemplo, la propuesta obtiene un acierto (el verde
de la segunda posición) y dos aproximaciones (el amarillo y el marrón):
Posiciones |
1
|
2
|
3
|
4
|
5
|
OBJETIVO |
Amarillo
|
Verde
|
Marrón
|
Verde
|
Fucsia
|
PROPUESTA |
Azul
|
Verde
|
Amarillo
|
Marrón
|
Marrón
|
Notemos que, cuando una ficha de la propuesta se asocia a una
ficha del objetivo, ya no se puede asociar a ninguna otra. Por ello, el "Verde"
de la propuesta sólo cuenta como acierto en la posición 2, y no
como aproximación en la posición 4 del objetivo (tienen preferencia
los aciertos sobre las aproximaciones). Igualmente, una ficha del objetivo sólo
puede asociarse a una ficha de la propuesta. Por ello, de los dos "Marrón"
de la propuesta, sólo se contabiliza una aproximación.
La secuencia de combinaciones que B ha formulado hasta un momento
dado proporciona una pista para la siguiente propuesta del jugador B, de manera
que, cuando B propone una jugada, puede comprobar previamente que sea coherente,
es decir, que no se contradiga con los resultados de las jugadas anteriores.
Una propuesta coherente a partir del ejemplo anterior (donde B supone que el
acierto era el marrón de la posición 4 y las aproximaciones el
amarillo y el verde) sería:
Posiciones |
1
|
2
|
3
|
4
|
5
|
PROPUESTA |
Amarillo
|
Rojo
|
Gris
|
Marrón
|
Verde
|
que sigue produciendo un acierto (amarillo) y dos aproximaciones
(marrón y verde).
Se pide la construcción de un programa que, dado
un objetivo y una secuencia de propuestas, indique el resultado de cada propuesta,
y para cada una de ellas diga si es coherente con las anteriores. Representaremos
los colores con números entre el 0 y el 9.
Entrada
Residente en el fichero de caracteres "MIND.DAT": una
primera línea con la combinación objetivo, y una serie de líneas
cada una de ellas correspondiente a una combinación propuesta. Cada línea
consiste de cinco dígitos (caracteres entre '0' y '9') separados por
un único blanco; no hay ningún otro tipo de caracteres ni al inicio
ni al final de la línea.
Salida
A guardar en el fichero de caracteres "MIND.OUT": para
cada combinación propuesta, existirá una línea en la salida
que dirá: el número de aciertos, el de aproximaciones y si la
combinación es coherente con las anteriores o no. Los dos primeros campos
se representan mediante un dígito, y el tercero mediante un carácter
'C' (coherente) o 'N' (no coherente). Existirá un único blanco
separando la información de cada línea; no hay ningún otro
tipo de caracteres ni al inicio ni al final de la línea.
Ejemplo de entrada
1 4 4 5 7
2 3 4 5 6
2 4 4 5 8
9 8 4 5 8
1 3 4 4 7
Ejemplo de salida
2 0 C
3 0 N
2 0 C
3 1 N |