Que te costó hacerlo llegar hasta las 2 millones 600 mil combinaciones xD
No entiendo bien a qué te refieres.
Me puse con ello durante la cena y poco antes de terminar de cenar ya estaba listo, peor en sí son apenas 5 minutos. El cálculo como lo hice en un equipo viejo algo así como 2 minutos... en un ordenador actual y programado en NET, llevaría pocos segundos, aunque el tiempo se emplea principlamente en escribir en fichero, en cálculo es apenas despreciable.
El tema viene a raíz de este hilo:
https://foro.elhacker.net/programacion_general/poker_calcular_cartas_validas-t497772.0.htmlEso parece 593 MB xD
Mejor utiliza otro separador de MB a Kilobytes, que lo correcto sería la coma:
5,93 Mb
Cuando codificas, usas la puntuación exigida, cuando hablas en español, pués la puntuación es la del español. Tiene que ver con gustos, suelo patear el purismo a favor de la claridad (no garantizo que lo consiga, por supuesto, aunque esa es la idea).
lo que sigue está mal, lo dejo para mi propio oprobio. Está mal porque he buscado un orden concreto de la mano, el de cuatro cartas en un orden determinado; pero la mano es la misma si las cartas están cambiadas de sitio. He buscado la combinación concreta 'ANanm' pero no tiene porqué estar esa combinación en ese orden en concreto, podría estar en, por ejemplo 'anANm' o cualquier otro, según el algoritmo que @Serapis haya usado para construir las combinaciones. Lo importante es que estén las cinco cartas. No voy a buscar ya si está esa mano específica o no porque sería una trabajo de chinos, y siendo @Serapis habrá que dar por hecho que está.
Están todas las manos posibles, son las que son...
Al buscar tienes que buscarlas en orden alfabético, teniendo presente que a la derecha siempre va a estar el carácter (carta mas alta) alfabéticamente mayor...
Los palos puede decidir uno mismo como asignarlos, es más acorde decidir un orden para los mismos...
por ejemplo: tréboles, diamantes, picas, corazones
Y puedes decidir si primero viene un plao completo, luego el otro, etc... o primero el As de cada palo, luego el 2 de cada palo, etc...
No importa el modo elegido, mientras estés de acuerdo con otro cuando hablais, para estar seguro de que hablais de exactamente lo mismo. Natualmente siempre hay un modo con el que uno se sentirá más cómodo.
Nota que el orden para generar las manos, es la forma natural en programación. Popr supuesto un jugador de póker no debería ordenar sus cartas en la mano, pero son cosas distintas el tratamiento informático se presta al orden. Generar secuencias todas desordenadas, es tremendamente complicado, porque necesitarías llevar la 'cuenta' de cuales han salido ya para no generarla por duplicado. Si fuera preciso tenerlas desordenadas, una vez generadas se barajan es algo muy rápido (mucho más que pretender conseguirlo al generar las secuencias).
Mi error viene del (mal) tic de jugador de póker de ordenas las cartas de izquierda a derecha. Tic de mal jugador como yo; un buen jugador nunca ordena las cartas, ya que podría dar pistas a los jugadores contrarios; o si acaso las mueve, pero no ordenándolas sino para despistar.
A continuación, mi cagada original:
Creo que faltan manos de cartas. Busqué la combinación 'póker de las cuatro cartas más bajas + una de las cartas más altas' y no la he encontrado.
Asumiendo que las cuatro cartas más bajas son: A, N, a, n; y las cuatro cartas más altas son: M, Z, m, z; busqué lacombinación "ANanm"; y no la encontré.
(cambio el color de este texto, porque la captura ha tomado parte del texto del foro, que no he recortado y aparece algo confuso si lo dejo negro).
La combinación 'ANanm' siguiendo el orden sugerido, vendría a ser póker de ases + un rey
..pero si te das cuenta, no está ordenadas las cartas (caracteres), pues 'm' es menor que 'n', (...j,k,l,m,n,o,p...) luego la secuencia debe buscarse como: "ANamn"
Adjunto la imagen donde se localiza:O no sé si es que no he interpretado bien cómo se formarían las combinaciones.
El palo lo interpretas de una forma que coincidimos, más arriba ya te he indicado, que uno mismo podría decidir que carta asignar a qué letra, pues hay 52 letras y son 52 cartas, pero vamos, no hace falta complicarse, A-M un palo, N-Z otro palo, a-m otro palo y n-z el 4º palo, acomoda bien...
En cuanto al orden, es el alfabético... sigue estos 2 pasos y es imposible perderse:
1 - Designa que símbolos corresponde a las cartas de tu interes, y luego
2 -
Simplemente ordena las letras de la secuencia de tu interés por orden alfabetico (orden ASCII, donde las minúsculas son menores que las mayúsculas: A-Z, a-z).
...es así que podrás encontrarlo.
Te advierto, que la posibilidad de error es nula, para mi estas cosas son tan simples como para un chaval de 12 años enumerar del 1 al 100, la forma en que la secuencias se condicionan una detrás de otra, no ofrece la posibilidad de error. Si hay 100 números la secuencia es completa, no hay posibilidad siquiera de duplicado (salvo que hubiere tocado manualmente algo, que entonces el error humano puede hacer acto de presencia, pero no ha sido el caso más que para añadir unas líneas aclaratorias al comienzo y que separé con una linea de '---' precisamente para advertir si en un momento dado el gato pisa el teclado selecciona algo al azar y lo borrase).
Aparte, comentar otra cosilla que la separo porque no se refiere directamente a la combinación de cartas para formar las mans posibles, sino a la evaluación de manos que ganan a otras y, por tanto habría que tenerlo en cuenta a la hora de calcular probabilidades de ganar manos o perderlas.
En realidad tenía en mente hacer también el cálculo de solo las manos con valores (digamos que la de 'carta alta', es nula, quedaría estas filtradas).
Pero lo dejaba para otra ocasión cuando en el hilo en cuestión (que menciono más arriba al citar a
Daniel), surgiera si ello podría ser interesante y el interesado no tuviera por donde cogerlo...
En cambio de pókeres sólo puede haber uno por cada carta; escaleras reales hay 4 que valen lo mismo, una por cada palo.
Ya digo que éso sólo sería al momento de calcular probabilidades y evaluar unas manos contra otras; ya que se está hablando de simulación de póker lo he metido aunque no se refiera directamente a formar las manos posibles.
Visita el hilo que menciono más arriba, ahí sugiero un algoritmo de 2 fases, donde en la primera fase se ignora el 'color' de los naipes, eso limita las posibles combinaciones resultantes, si satisface ciertas condiciones iniciales entonces se aborda la segunda fase para investigar el color de la mano.
El cálculo de los porcentajes de posibilidad para obtener una mano, por otro lado, debe tener en cuenta las cartas que ya han salido y las que tiene el jugador qur tiene el turno... pero no las que tienen los otros jugadores (al menos no en directo, pues falsificaría la partida, en diferido, grabado y tiempo después de haber jugado, eso no tiene importancia).
Ese cálculo inicialmente empieza con valores absolutos pues la cantidad de parejas, tríos, etc... es fijo, dichos valores van cambiando a medida que el juego avanza y salen cartas (descubiertas), en juegos en los que exista la posibilidad de descarte sin mostrar las cartas, el cálculo no será exacto y supongo que en casos así ni siquiera merece hacerlo, pues no arroja 'sustancia provechosa'.
p.d.:
Si miras tu imagen (esta es la tuya) y la comparas con la mía, verás que la primera secuencia (ANamq) en tu imagen, aparece apenas 3 o 4 secuencias más abajo de donde se localiza la secuencia buscada.