Pregunta

Estoy buscando un algoritmo que determine si la mano actual de Mahjong es ganadora. Si no está familiarizado con el juego, aquí está la idea básica (simplificada):

  • Hay tres trajes de azulejos, cada uno que contiene azulejos clasificados 1-9. También hay mosaicos especiales, siete tipos de ellos. Cada mosaico existe en cuatro copias, por lo que hay 36 azulejos de cada traje y 28 mosaicos especiales.
  • Una mano tiene 14 mosaicos.
  • A perro chino es un conjunto de tres mosaicos de un solo rango en secuencia.
  • A apestar es un conjunto de tres mosaicos idénticos.
  • A kong es un conjunto de cuatro mosaicos idénticos.
  • A par es un conjunto de dos mosaicos idénticos.
  • Una mano ganadora es aquella en la que los mosaicos forman cualquier cantidad de Chows, Pongs y/o Kongs y un par.

La mano está ordenada por traje y luego por rango. Mi idea es algo como esto:

  1. Marque todos los mosaicos como no visitados y no ganadores.
  2. Visite el primer mosaico no visitado.
  3. Verifique los mosaicos posteriores hasta que se encuentre un chow, pong o un kong, o hasta que no haya posibilidad de ello. Si se completa una combinación, Marque todos los mosaicos participantes como se visitan y ganan
  4. Si se han visitado todos los mosaicos, verifique si todos están ganando. Si no se han visitado todos los mosaicos, vaya a 2.

El problema es que una vez que un mosaico es parte de una combinación, el IS no puede ser miembro de ninguna otra combinación, una que pueda hacer que la mano sea ganadora.

¿Alguna idea para un algoritmo de trabajo?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top