Autor Tema: ¿Cómo ganar rápido en juego similar al Mastermind?

0 Usuarios y 1 Visitante están viendo este tema.

17 Abril, 2019, 06:11 am
Leído 750 veces

Tachikomaia

  • Aprendiz
  • Mensajes: 203
  • Karma: +0/-0
  • Sexo: Masculino
MasterMind:
https://es.wikipedia.org/wiki/Mastermind
Más info aquí:
https://en.wikipedia.org/wiki/Mastermind_(board_game)#Algorithms

El juego que me interesa se llama Codebreaker y está en otro llamado Demikids de GBA. No encontré estrategias en guías, etc, ni siquiera un video que muestre ese "minijuego" (probablemente lo hay, pero los walkthrough/lets play se llaman "part 1", etc, y no voy a buscar en qué parte lo muestran). Tiene un nivel difícil y uno normal, que por ahora es el que me interesa y funciona así:
1- Se genera un número al azar de 3 cifras usando números del 0 al 5, sin repetir. Yo no sé el número que se genera (a menos que haga trampa, pero no quiero).
2- Yo elijo un número de dichas condiciones (excepto el ser por azar).
3- El juego informa cuántos números bien colocados (considerando el número elegido por la computadora) puse, y cuántos números están mal colocados.
El paso 2 y 3 se repiten hasta digamos decir 6 códigos fallidos o hasta que yo acierte el número elegido por la compu.

Ejemplo:
Spoiler
1- Se genera el número 210
2.1- Yo digo 012
3.1- Me dice 1-2, lo cual significa que hay 1 número bien colocado (el 1, pero yo eso no puedo saberlo en este punto porque no sé el número generado) y 2 mal colocados.
2.2- Debido a que en este caso habría tenido bastante suerte, sé que el número es 021, o 210, o 102. A partir de ahora es cuestión de probar esos 3, no sé si hay un orden mejor que otro.
[cerrar]

Ejemplo 2:
Edit: Este ejemplo está mal, lo explico en el 2ndo post.
Spoiler
1- Se genera 531
2.1- Digo 012
3.1- Obtengo 0-1.
2.2- No tengo mucha idea de qué hacer, 304.
3.2- De nuevo 0-1
2.3- ¿?
Si el 0 fuese uno de los números, entonces los demás no son el 1, 2, 3 y 4, lo cual deja sólo al 5 pero entonces son sólo 2 por lo que queda descartado.
Si el 1 fuese uno, entonces no está el 2, y 3 y 4 no pueden estar a la vez así que es 135 o 145, en algún orden.
Si el 2 fuese uno, idem cambiando el 1 por el 2.
Ningún orden de 345 puede ser porque debido a las pistas sabemos que el 1 o 2 está presente.
Digo 245
3.3- 0-1
Joder.
Si los nums posibles eran 135, 145, 235, y 245 entonces asumo que es 135, pero por qué...
Si asumiera que el correcto es el 2, sólo puede ser 235 y 245, pero si fuese uno de esos habría obtenido al menos 2 números mal colocados, así que el 2 no está.
Si asumiera que el 4, queda 135 y 235, pero ocurre lo mismo... así que no.
...
La 1era cifra sé que no es el 3.
La 2nda no es el 1.
La 3era no es 5.
Entonces es: 153 o 531.
Ahora es cuestión de probar.
[cerrar]

Básicamente me gustaría tener un diagrama de flujo para saber qué hacer ante cada caso, o si no es un diagrama algo que yo pueda hacer y usar fácil. Un programa en este caso no lo es para mí creo, y no quiero usar algo que no entiendo, además.

Esto

...podría ser la base, modifíquenla y complétanla cuánto quieran o hagan otra cosa mejor (el problema de esta representación es que si muchas flechas salen de cada posibilidad se van a chocar o abarcar mucha pantalla. Lo bueno es que la cantidad de flechas que sale de cada posibilidad va bajando, y además la 2-1 no es posible creo y la 3-0 no es necesaria).
Algunos números de ahí los puse más por simetría que por otra cosa, no tengo mucha idea.

Estoy haciendo algo menos problemático que esa representación, así:
012__0-0__345__0-3__453__0-3__534
_______________1-2__354__0-3__435__0-3__543
_____0-1

18 Abril, 2019, 06:59 am
Respuesta #1

Tachikomaia

  • Aprendiz
  • Mensajes: 203
  • Karma: +0/-0
  • Sexo: Masculino
El 2ndo ejemplo está mal  :banghead:

Estaba por plantearlo en un foro de programación y al intentar entender lo que escribí, me di cuenta y también se me ocurrió un "método" para ese caso.

En principio cualquier número puede estar en cualquier lado, en tanto no se repita. Tenemos algo así:
000
111
222
333
444
555

1era cifra, 2nda, y 3era.

Digo 012 y obtengo 01.
Entonces ahora tenemos esto:
_00
1_1
22_
333
444
555

Digo 304 y obtengo 01.
Entonces:
__0
1_1
22_
_33
44_
555

Además, como el 0 no puede estar a la vez con el 1, 2, 3 ni 4, queda descartado.

Digo 245, obtengo 01.
Acá está el error, pensé que era 135 pero si fuese 135 habría obtenido 10.
Bueno...
1_1
_2_
_33
4__
55_
Entonces los números pueden ser:
153
531
Porque...
12X no puede ser, pista 1.
13X tampoco porque no hay un 3er número distinto a esos.
153 sí
42X no por la pista 3, además cualquier 3er número de los posibles también contradice otras pistas. No 21 y no 43.
43X no. pista 2.
45X no, pista 3.
52X no por 3.
531 ok

O sea, puse a propósito pistas 01 porque eran una de ante las cuales no sabía qué hacer, pero ahora más o menos sí. Veré si esto es aplicable a otras pistas.

Si digo 012 y resulta 02:
_00
1_1
22_
03 es lo mismo creo...

Si resulta 10:
0__
_1_
__2
20: Igual creo.

11:
En este caso creo que no.

12:
Creo que tampoco.