Esto es realmente una pregunta basada en Mahjong, pero un fondo basado en Romme o incluso Poker también será suficiente para entender.Algoritmo para encontrar calles y el mismo tipo en una mano
En Mahjong 14 fichas (las fichas son como cartas en el Póker) se organizan en 4 series y un par. Una calle ("123") siempre usa exactamente 3 fichas, ni más ni menos. Un conjunto del mismo tipo ("111") consta exactamente de 3 fichas, también. Esto lleva a una suma de 3 * 4 + 2 = 14 fichas.
Existen varias excepciones como Kan o Trece Huérfanos que no son relevantes aquí. Los colores y los rangos de valores (1-9) tampoco son importantes para el algoritmo.
Estoy tratando de determinar si una mano se puede organizar de la manera descrita anteriormente. Por ciertas razones, no solo debería poder tratar con 14 sino con cualquier cantidad de fichas. (El siguiente paso sería encontrar cuántos azulejos necesitan ser intercambiados para poder completar una mano.)
Ejemplos:
11122233344455
- bastante fácil, 4 juegos y un par.
12345555678999
- 123, 456, 789, 555, 99
11223378888999
- 123, 123, 789, 888, 99
11223344556789
- no es una parte válida
Mi idea actual y todavía no se ha implementado es la siguiente: Para cada azulejo, intente hacer a) una calle b) un conjunto c) un par. Si ninguno funciona (o hubiera> 1 par), regrese a la iteración anterior y pruebe la siguiente opción, o, si este es el nivel más alto, falle. De lo contrario, elimine las fichas usadas de la lista de fichas restantes y continúe con la siguiente iteración.
Creo que este enfoque funciona y también sería razonablemente rápido (el rendimiento es una "bonificación agradable"), pero me interesa su opinión al respecto. ¿Puedes pensar en soluciones alternativas? ¿Esto o algo similar ya existe?
(No es tarea, I'm learning to play Mahjong.)
Oooohh Lo sé, usaré Regular Expressions !! 11! – mafu
Algunas personas, cuando se enfrentan con un problema, piensan "Lo sé, usaré expresiones regulares". Ahora ellos tienen dos problemas.~ Jamie Zawinski :) –
Puedes dividir hasta tres conjuntos tratando de formar una calle (o al revés). ¿Eso esta bien? –