Esta issue tem como objetivo adicionar a implementação do exercício "Poker" ao projeto. O exercício consiste em desenvolver três funções separadas para a resolução do problema:
valor_carta: Esta função será responsável por converter a descrição de uma carta em seu valor numérico correspondente. A descrição de uma carta é dada por 2 caracteres, sendo o primeiro o valor da carta e o segundo o naipe.
verificar_vencedor: Esta função será responsável por comparar duas mãos de poker e determinar o vencedor com base nas regras estabelecidas. Serão levados em consideração os tipos de mãos e seus critérios de desempate.
avaliar_mao: Esta função será responsável por avaliar uma mão de poker e determinar seu tipo, seguindo as regras estabelecidas.
Descrição do exercício:
Por XVII Maratona de Programação IME-USP, 2013 BR Brazil
Poker é jogado com um baralho tradicional de 52 cartas (13 valores com 4 naipes). Os valores das cartas, em ordem crescente, são: 2, 3,..., 10, Valete, Dama, Rei, Ás. Dada uma mesa de poker, com dois jogadores, sua tarefa é determinar quem ganhou.
Cada jogador possui duas cartas próprias e há cinco cartas comuns aos dois jogadores na mesa. Ganha quem conseguir uma mão de cinco cartas mais valiosa, entre as suas duas cartas próprias e as cinco cartas da mesa. Uma carta da mesa pode ser usada pelos dois jogadores ao mesmo tempo e a mão mais valiosa de um ou dos dois jogadores pode ser obtida ignorando as suas duas cartas próprias e usando as cinco comuns.
Para comparar duas mãos de cinco cartas, verifica-se em quais tipos da lista abaixo elas se encaixam. Se uma mão se encaixar em mais de um tipo, escolhe-se o mais valioso. Se as duas mãos se encaixarem num mesmo tipo, se aplica uma regra de desempate específica para este tipo.
A lista de tipos de mãos, ordenados do menos valioso para o mais valioso, e seus respectivos critérios de desempate é:
Carta mais alta: qualquer mão que não se enquadre em nenhum dos demais tipos. No desempate, as cinco cartas são comparadas uma a uma, da mais valiosa para a menos, até uma mão apresentar uma carta com valor maior que o da outra.
Um par: duas cartas de mesmo valor. O desempate é análogo ao da carta mais alta, comparando primeiro o valor do par e depois as demais cartas.
Dois pares: dois pares. O desempate é análogo ao da carta mais alta, comparando primeiro o valor do par mais valioso, depois o valor do par menos valioso e por fim a carta restante.
Trinca: três cartas de mesmo valor. O desempate é análogo ao do par.
Straight: sequência de cinco cartas de valores consecutivos. Neste caso, o Ás pode tomar o valor tanto de carta mais baixa (antes do 2) ou de mais alta (depois do Rei). O desempate é feito pela carta de maior valor, sendo que excepcionalmente o Ás tem o menor valor se aparecer antes do 2.
Flush: cinco cartas do mesmo naipe. O desempate é feito pelo critério da carta mais alta.
Full House: uma trinca e um par. No desempate, é comparado primeiro o valor da trinca. Persistindo o empate, é comparado o valor do par.
Quadra: quatro cartas com um mesmo valor. No desempate, compara-se o valor da quadra e depois a carta restante.
Straight Flush: straight e flush simultaneamente. O desempate é feito como no straight.
Note que é possível persistir o empate mesmo depois de aplicadas as regras de desempate. Os naipes das cartas só são considerados para definir um flush, não sendo considerados em nenhuma regra de desempate.
Entrada:
A entrada é composta por diversas instâncias e termina com final de arquivo (EOF).
Cada instância é composta por três linhas. As duas primeiras linhas contêm a descrição de duas cartas cada uma, separadas por espaço. A primeira linha corresponde às cartas do primeiro jogador, enquanto a segunda corresponde às cartas do segundo jogador. A terceira linha contém a descrição das cinco cartas na mesa, também separadas por espaço.
Caracter Carta
'2' - '9' 2 - 9
'T' 10
'J' Valete
'Q' Dama
'K' Rei
'A' Ás
'e' Espadas
'c' Copas
'o' Ouros
'p' Paus
A descrição de uma carta é dada por 2 caracteres, sendo o primeiro o valor da carta e o segundo o naipe, conforme a tabela acima.
Saída:
Para cada instância, imprima uma linha contendo um número inteiro. Imprima 1 se o primeiro jogador ganhar essa instância, imprima 2 caso o segundo ganhe e imprima 0 se houver um empate, mesmo depois de aplicadas as regras de desempate.
Exemplo de Entrada:
Te Je
Tp Jp
Qe Qp Ke Kp Ae
Ae 7o
Ac 8e
Ap Ao 9e Jc Kp
Ae 7o
Ac 8e
Ap Ao 6e 3c Kp
Exemplo de Saída:
1
0
2
To do:
[ ] Implementar a função valor_carta para converter a descrição de uma carta em seu valor numérico correspondente.
[ ] Implementar a função avaliar_mao para avaliar uma mão de poker e determinar seu tipo.
[ ] Implementar a função verificar_vencedor para comparar duas mãos de poker e determinar o vencedor com base nas regras estabelecidas.
Link do exercício na plataforma Beecrowd
Esta issue tem como objetivo adicionar a implementação do exercício "Poker" ao projeto. O exercício consiste em desenvolver três funções separadas para a resolução do problema:
Descrição do exercício:
Por XVII Maratona de Programação IME-USP, 2013 BR Brazil
Poker é jogado com um baralho tradicional de 52 cartas (13 valores com 4 naipes). Os valores das cartas, em ordem crescente, são: 2, 3,..., 10, Valete, Dama, Rei, Ás. Dada uma mesa de poker, com dois jogadores, sua tarefa é determinar quem ganhou.
Cada jogador possui duas cartas próprias e há cinco cartas comuns aos dois jogadores na mesa. Ganha quem conseguir uma mão de cinco cartas mais valiosa, entre as suas duas cartas próprias e as cinco cartas da mesa. Uma carta da mesa pode ser usada pelos dois jogadores ao mesmo tempo e a mão mais valiosa de um ou dos dois jogadores pode ser obtida ignorando as suas duas cartas próprias e usando as cinco comuns.
Para comparar duas mãos de cinco cartas, verifica-se em quais tipos da lista abaixo elas se encaixam. Se uma mão se encaixar em mais de um tipo, escolhe-se o mais valioso. Se as duas mãos se encaixarem num mesmo tipo, se aplica uma regra de desempate específica para este tipo.
A lista de tipos de mãos, ordenados do menos valioso para o mais valioso, e seus respectivos critérios de desempate é:
Note que é possível persistir o empate mesmo depois de aplicadas as regras de desempate. Os naipes das cartas só são considerados para definir um flush, não sendo considerados em nenhuma regra de desempate.
Entrada: A entrada é composta por diversas instâncias e termina com final de arquivo (EOF).
Cada instância é composta por três linhas. As duas primeiras linhas contêm a descrição de duas cartas cada uma, separadas por espaço. A primeira linha corresponde às cartas do primeiro jogador, enquanto a segunda corresponde às cartas do segundo jogador. A terceira linha contém a descrição das cinco cartas na mesa, também separadas por espaço.
Caracter Carta '2' - '9' 2 - 9 'T' 10 'J' Valete 'Q' Dama 'K' Rei 'A' Ás 'e' Espadas 'c' Copas 'o' Ouros 'p' Paus
A descrição de uma carta é dada por 2 caracteres, sendo o primeiro o valor da carta e o segundo o naipe, conforme a tabela acima.
Saída: Para cada instância, imprima uma linha contendo um número inteiro. Imprima 1 se o primeiro jogador ganhar essa instância, imprima 2 caso o segundo ganhe e imprima 0 se houver um empate, mesmo depois de aplicadas as regras de desempate.
Exemplo de Entrada: Te Je Tp Jp Qe Qp Ke Kp Ae Ae 7o Ac 8e Ap Ao 9e Jc Kp Ae 7o Ac 8e Ap Ao 6e 3c Kp
Exemplo de Saída: 1 0 2
To do: