Mãos de pôquer

Published by siddharthreddy in

No jogo de cartas pôquer, uma mão consiste em cinco cartas e é classificada, da menor para a maior, da seguinte maneira:

N.ºClassificação da mãoExplicação
1Carta altaA carta de maior valor.
2Um parDuas cartas do mesmo valor.
3Dois paresDois pares diferentes.
4TrincaTrês cartas do mesmo valor.
5SequênciaTodas as cartas têm valores consecutivos.
6FlushTodas as cartas são do mesmo naipe.
7Full houseUma trinca e um par.
8QuadraQuatro cartas do mesmo valor.
9Straight flushTodas as cartas têm valores consecutivos e são do mesmo naipe.
10Royal flushDez, valete, dama, rei e ás do mesmo naipe.

As cartas têm valores na seguinte ordem:

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

Se dois jogadores tiverem mãos com a mesma classificação, vence a classificação formada pelo maior valor. Por exemplo, um par de oitos vence um par de cincos (veja o exemplo n.º 1). Mas, se duas classificações empatarem, por exemplo, se ambos os jogadores tiverem um par de damas, as cartas de maior valor de cada mão serão comparadas (veja o exemplo n.º 4). Se as cartas de maior valor empatarem, as próximas cartas de maior valor serão comparadas, e assim por diante.

Considere as cinco mãos a seguir, distribuídas para dois jogadores:

MãoJogador 1Jogador 2Vencedor
15H 5C 6S 7S KD2C 3S 8S 8D TDJogador 2
25D 8C 9S JS AC2C 5C 7D 8S QHJogador 1
32D 9C AS AH AC3D 6D 7D TD QDJogador 2
44D 6S 9H QH QC3D 6D 7H QD QSJogador 1
52H 2D 4C 4D 4S3C 3D 3S 9S 9DJogador 1

Crie uma função que receba uma lista de mãos aleatórias distribuídas para dois jogadores. Cada string contém dez cartas (separadas por um único espaço). As cinco primeiras são as cartas do Jogador 1 e as cinco últimas são as cartas do Jogador 2. A função deve retornar o número de mãos vencidas pelo Jogador 1.

Exemplos

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

Observações

  • Considere que todas as mãos são válidas (sem caracteres inválidos ou cartas repetidas).
  • A mão de cada jogador não está em uma ordem específica.
  • Em cada mão há um vencedor claro.
  • Dez é representado como T em vez de 10.