Poker: analizador de manos II

Una vez que ya está planteado el camino a seguir, hace falta concretar un poco más. El siguiente paso es especificar el algoritmo que seguirá el programa. Básicamente, la entrada al programa son un conjunto de 7 cartas (cada carta tiene un número del 1 al 13 y un color de entre 4 posibles), y la salida debe ser el número de mano asociado a la carta según la tabla de las relaciones de equivalencia.

El algoritmo está planteado de la siguiente manera:

  1. A cada carta, le asociamos el valor asociado a su número según la tabla del post anterior.
  2. Sumamos todos los valores, y obtenemos una expresión única para cada combinación de cartas.
  3. Vamos a una tabla en la que esté cada expresión asociada a su valor, y lo leemos.

En principio, parece simple. Sin embargo, no lo es tanto, ya que existen dos inconvenientes:

  • Habrá que crear la tabla, y eso llevará tiempo. Notemos que la longitud de la tabla no será excesiva porque nos aprovechamos de que la suma es conmutativa y, por tanto, no importa el orden en que introducimos las 7 cartas, ahorrándonos muchos registros (ordenar las cartas de menor a mayor antes de evaluar la mano ralentiza el algoritmo, y en nuestro caso no hace ninguna falta).
  • ¡No hemos tenido en cuenta el color! Habrá que modificar nuestro algoritmo para que detecte este caso y lo tenga en cuenta.

La solución a estos dos obstáculos es la siguiente:

  • En el primer caso, para crear la tabla necesitaríamos crear un analizador de manos “a lo bruto”: uno que primero mirara si hay escalera de color. Si no, si hay poker. Si no, si hay full, etc. Después, calcular el número que le correspondería a cada tipo de mano en función de la mano concreta (poker de as, poker de K, etc.), y que el programa lo introdujese automáticamente. Este es un trabajo muy laborioso, pero afortunadamente ya está hecho: utilizando, una vez más, el código fuente del analizador de Cactus Kev’s, disponible en su página web, podemos automatizar este trabajo.
  • El segundo es más problemático, porque es un problema estructural. La mejor solución que he encontrado es comprobar en cada caso si hay color o no, y en caso de que haya color crear otra tabla como la anterior en la que sólo se tengan que sumar los valores de las cartas del color en cuestión. Para hacer más eficiente el proceso en cuestión, he tenido que hacer un proceso muy similar al anterior: a cada color le asigno un valor, según la siguiente tabla, y al sumar los valores una tabla preprogramada me dirá si hay 5 cartas o más del mismo palo, y cual es el palo

La tabla para los colores es:

Color: Corazones Picas Espadas Tréboles
Valor asignado: 1 8 57 400

Los valores son distintos en este caso que en la tabla del post anterior, porque en este caso no ponemos el 0 (ya que así podremos utilizar la misma tabla para evaluar manos de 5, 6 ó 7 cartas), y además ahora pueden aparecer hasta 7 cartas con el mismo color, a pesar de que solo pueden aparecer 4 cartas con el mismo número.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *