(disclaimer: Estoy trabajando en un software de póquer que hace, entre otras, las evaluaciones de mano)
le da a sus 7 cartas a él y escupe un valor de equivalencia mano.
hay varios evaluadores haciendo eso y si no me equivoco, algunos de ellos calculan más de cien millones de manos por segundo (!). Estos evaluadores básicamente se reducen a 7 búsquedas de matriz en una matriz gigantesca y solo se requieren unos pocos ciclos (a pesar de los errores de caché) para evaluar una mano. No creo que 14-15 millones/segundo esté cerca del más rápido. El evaluador de CactusKev es 10 veces más rápido si no me equivoco.
Ahora para responder a su pregunta:
¿cómo se consigue la mejor combinación de 5 cartas de las 7 que se le ha pasado?
Bueno, no le dice pero una vez que tenga la fuerza de la mano puede llegar a ser muy fácil: no es necesario reinventar la rueda.
Puede usar la fuerza para simplificar su "mejor cinco de siete" cálculos.
Usted podría también usar otras bibliotecas, dándole a usted directamente las cinco mejores cartas (en lugar de solo su fuerza) o puede usar la fuerza para encontrar las cinco mejores cartas usted mismo.
Voy a dar algunos ejemplos ...
Usted sabe que tiene una casa llena (también conocido como un "bote"), entonces usted sabe que usted está buscando tres tarjetas que tienen el mismo rango y luego el mejor par (si hay dos pares, pero seguro que encontrará al menos uno, porque el evaluador le dijo que tiene un bote).
Sabes que tienes una escalera: encuentra cinco cartas que se suceden una a la otra, empezando por la mejor (ten cuidado con el caso especial de la rueda).
También podría obtener un poco más elegante para la recta: podría tomar la fuerza de cada recta posible y comparar la fuerza que el evaluador le da con estos. Si coincide, digamos, una recta de diez, simplemente busca cualquier carta T, 9, 8, 7 y 6 (sin importar el palo).
Usted sabe que tiene "ningún par": basta con tomar la carta más alta que cinco se encuentran
etc.
Sólo hay unas pocas filas diferentes ... Podrían ser, por ejemplo:
NO_PAIR
ONE_PAIR
TWO_PAIRS
SET
STRAIGHT
FLUSH
FULL_HOUSE
FOUR_OF_A_KIND
STRAIGHT_FLUSH
(que podría, por supuesto, crear intermedia "rueda recta" y "rueda de escalera de color" y los casos "escalera real" si lo desea, etc.)
Una vez que sepa qué tipo de mano es su mano (gracias al rápido evaluador que está utilizando), simplemente cambie a un código que encuentre los cinco mejores de siete para esa mano en particular .
Creo que es una buena manera de proceder porque aprovecha el evaluador ultrarrápido y simplifica enormemente su lógica.
En el inicio, lo que se necesita para calcular la strenth vez, por ejemplo mediante el cálculo:
HIGHEST_NO_PAIR_HAND = ultraFastEvaluator("As Kd Qh Jc 9d 5s 2c");
HIGHEST_FULL_HOUSE = ultraFastEvaluator("As Ac Ad Kh Ks 8s 2h");
estoy abogando por supuesto no utilizar cadenas aquí. Es sólo un ejemplo ...
A continuación, podría, por cada mano que desee encontrar el actual cinco mejores:
- calcular la fuerza usando el evaluador rápido
- es que < = HIGHEST_NO_PAIR_HAND?
- sí: tomar cinco cartas más altas
- no: es que < = HIGHEST_ONE_PAIR_HAND? sí: tomar el par más alto + tres cartas más altas no: ¿es < = HIGHEST_TWO_PAIRS_HAND?
Así que en mi opinión se podría volver a utilizar una API que se encuentra directamente los cinco mejores de cada siete o totalmente reescribir su propia, pero va a más rápido si se utiliza el resultado del evaluador rápido para luego simplificar tu lógica.
EDITAR nota que no hay necesariamente una manera de hacerlo "cinco mejores de cada siete". Por ejemplo, con As Ac en una tabla Kc Kd Qh Qs 2c, tanto "As Ac Kc Kd Qh" como "As Ac Kc Kd Qs" son "cinco mejores" (el último palo de dama no importa).
¿Puede profundizar en qué es la evaluación de mano de poker Two Plus Two? – templatetypedef
hola templatetypedef, he actualizado la pregunta con un enlace a twoplustwo. – ian
Todavía no entiendo. Las mejores 5 cartas de una mano de 7 cartas? O algo mas. – sblom