Manos de póker

Published by siddharthreddy in

En el juego de cartas póker, una mano consta de cinco cartas y se clasifica, de menor a mayor, de la siguiente manera:

N.ºClasificación de la manoExplicación
1Carta altaLa carta de mayor valor.
2Una parejaDos cartas del mismo valor.
3Dos parejasDos parejas diferentes.
4TríoTres cartas del mismo valor.
5EscaleraTodas las cartas tienen valores consecutivos.
6ColorTodas las cartas son del mismo palo.
7FullUn trío y una pareja.
8PókerCuatro cartas del mismo valor.
9Escalera de colorTodas las cartas tienen valores consecutivos y son del mismo palo.
10Escalera realDiez, jota, reina, rey y as del mismo palo.

Las cartas tienen valores en el siguiente orden:

2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King, Ace

Si dos jugadores tienen manos con la misma clasificación, gana la clasificación formada por el valor más alto. Por ejemplo, una pareja de ochos vence a una pareja de cincos (consulta el ejemplo n.º 1). Pero si dos clasificaciones empatan, por ejemplo, si ambos jugadores tienen una pareja de reinas, se comparan las cartas de mayor valor de cada mano (consulta el ejemplo n.º 4). Si las cartas de mayor valor empatan, se comparan las siguientes cartas de mayor valor, y así sucesivamente.

Considera las siguientes cinco manos repartidas entre dos jugadores:

ManoJugador 1Jugador 2Ganador
15H 5C 6S 7S KD2C 3S 8S 8D TDJugador 2
25D 8C 9S JS AC2C 5C 7D 8S QHJugador 1
32D 9C AS AH AC3D 6D 7D TD QDJugador 2
44D 6S 9H QH QC3D 6D 7H QD QSJugador 1
52H 2D 4C 4D 4S3C 3D 3S 9S 9DJugador 1

Crea una función que reciba una lista de manos aleatorias repartidas entre dos jugadores. Cada cadena contiene diez cartas (separadas por un solo espacio). Las primeras cinco son las cartas del Jugador 1 y las últimas cinco son las cartas del Jugador 2. La función debe devolver el número de manos que ganó el Jugador 1.

Ejemplos

player1_wins([
  "8C TS KC 9H 4S 7D 2S 5D 3S AC",
  "5C AD 5D AC 9C 7C 5H 8D TD KS",
  "3H 7H 6S KC JS QH TD JC 2D 8S",
  "TH 8H 5C QS TC 9H 4D JC KS JS",
  "7C 5H KC QH JD AS KH 4C AD 4S"
]) ➞ 2

player1_wins([
  "5H QS 8S 6D 3C 8C JD AS 7H 7D",
  "6H TD 9D AS JH 6C QC 9S KD JC",
  "AH 8S QS 4D TH AC TS 3C 3D 5C",
  "5S 4D JS 3D 8H 6C TS 3S AD 8C",
  "6D 7C 5D 5H 3S 5C JC 2H 5S 3D",
  "5H 6H 2S KS 3D 5D JD 7H JS 8H",
  "KH 4H AS JS QS QC TC 6D 7C KS",
  "3D QS TS 2H JS 4D AS 9S JC KD",
  "QD 5H 4D 5D KH 7H 3D JS KD 4H"
]) ➞ 3

player1_wins([
  "5S 9C KH KD 9H 5C TS 3D 7D 2D",
  "5H AS TC 4D 8C 2C TS 9D 3H 8D"
]) ➞ 2

Notas

  • Supón que todas las manos son válidas (sin caracteres no válidos ni cartas repetidas).
  • La mano de cada jugador no sigue ningún orden específico.
  • En cada mano hay un ganador claro.
  • Diez se representa como T en lugar de 10.