Seu amigo convidou você para um jogo de pôquer de alto risco no último minuto e, como cientista da computação, decidiu usar suas habilidades para ganhar vantagem no jogo. Sua tarefa será, dada 2 cards
(sua mão) e 0, 3, 4 or 5 cards
(as cartas distribuídas), você deve decidir qual será a melhor mão possível. Se todas as 7 cartas forem dadas como argumentos, a resposta é bastante clara. Se dado menos, o problema se torna mais complexo. No entanto, isso não é o suficiente para dar a vantagem que você procura, você também deve calcular a melhor mão possível das cartas restantes para entender o que seus oponentes também poderiam ter.
Atualização do Hold'em
Se você não conhece o hold'em, cada jogador no jogo começa com 2 cartas como sua 'mão'. Ao longo de 3 'turnos', revelam-se cartas adicionais para serem compartilhadas entre todos os jogadores. No primeiro turno, 3 cartas são reveladas. A segunda, mais 1 e a terceira vez que uma carta final é revelada. As duas cartas dadas primeiro representam a sua mão, enquanto as últimas representam 0, 3, 4 ou 5 cartas dadas pelos turnos sucessivos.
Números possíveis:
[2,3,4,5,6,7,8,9,T(10),J,Q,K,A]
Possíveis fatos:
[S,C,H,D]
Deck completo:
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS, # Spades.
2C,3C,4C,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC, # Clubs.
2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH, # Hearts.
2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD] # Diamonds.
Classificação das mãos:
1:Royal Flush (A-K-Q-J-10, all from the same suit).
2:Straight Flush (Sequential cards, all from the same suit).
3:Four-of-a-Kind (Self explanatory).
4:Full House (3-of-a-kind and a 2-of-a-kind).
5:Flush (All cards are from the same suit).
6:Straight (Sequential Cards, any suits).
7:3-of-a-Kind (Self explanatory).
8:2-Pair (Double 2-of-a-Kind).
9:Pair (2-of-a-Kind).
10:High Card (You have absolutely nothing except a single card).
Vamos dar um exemplo ou dois e percorrê-los:
O exemplo simples:
[AS, AC],[AH,AD,9S,9C,9H]
-> 3
(Quatro), 3
(Quatro)
A melhor mão possível que você terá nessa configuração é a mão de quatro tipos. A melhor mão possível que seus oponentes poderiam ter também é a de 4, porque você não pode ter um KQJ10 nas mãos de duas cartas.
[5C,2C],[6C,4C,JH,JD]
-> 2
(Straight Flush), 3
(4-de-um-tipo)
Você corre o risco de um straight flush, mas como você tem o 2 / 5C na sua mão, ninguém mais se deve ao fato de você ter as duas cartas do meio. O melhor que eles podem esperar é ter dois Valetes e um Valete no flop.
[JS,JC],[]
-> 1
(Royal Flush), 1
(Royal Flush)
Nenhuma informação que você possa usar contra eles foi fornecida, tudo o que você pode dizer no momento é que eles só podem ter um royal flush em diamantes / copas, mas é tão possível que você obtenha o royal flush quanto eles. De fato, todas as entradas em que o flop ainda não aconteceu devem resultar em uma resposta de 1 a 1.
[2C,4S],[3C,7S,9D,AH,JD]
-> 10
(Carta Alta), 7
(3)
Este é um exemplo de onde você está absolutamente ferrado, e não há possibilidade de um straight ou um flush dado o river. Significando que a melhor mão aqui são ases, resultando em um 3-de-um-tipo.
Requisitos de E / S
- A entrada deve ser separada entre o que está na sua mão e o que é conhecimento público; provavelmente será mais fácil assim, independentemente da implementação.
- Os cartões podem ser tuplas ou cordas, até você.
- A mão e o campo de jogo podem ser matrizes ou strings delimitadas.
- A saída deve ser dois índices da lista de ponteiros que eu forneci (EG [2,1]).
- Pode ser retornado como parte de uma função, impresso no console ou produzido de maneira adequada.
- Deve haver dois valores distintos, um para a sua melhor mão, outro para a melhor possível.
- 10 pode ser representado como um
T
ou como10
, o que fizer sentido para você. - As brechas padrão não são permitidas.
Critérios Vencedores
- Trata-se de código-golfe , menor contagem de bytes com um desempate da data de postagem.
A
e um 1
. Tudo o resto parece bom.
A
e1
os possíveis cartões permitidos? Também não acho que exista realmente uma razão convincente para exigir as abreviações de face sobre valores numéricos como11
.