Inspirado por este desafio e relacionado a este .
fundo
Badugi [bæduːɡiː] é uma variante de draw-poker de bola baixa.
O evento de $ 1K da Copa do Mundo Poker Online do Pokerstars começa em 3 horas e eu precisarei saber o quão boas minhas mãos são!
O jogo usa um baralho padrão de 52 cartas de quatro naipes e treze fileiras. Os fatos não têm ordem e devem ser rotulados cdhs
; as fileiras - ordenadas do mais alto K
para o mais baixo A
- são KQJT98765432A
. Como tal, o baralho completo pode ser representado da seguinte forma (separado por espaço):
Kc Kd Kh Ks Qc Qd Qh Qs Jc Jd Jh Js Tc Td Th Ts 9c 9d 9h 9s 8c 8d 8h 8s 7c 7d 7h 7s 6c 6d 6h 6s 5c 5d 5h 5s 4c 4d 4h 4s 3c 3d 3h 3s 2c 2d 2h 2s Ac Ad Ah As
Cada jogador recebe quatro cartas do baralho, há quatro rodadas de apostas com três rodadas de empate no meio (um jogador sempre tem quatro cartas, tem a opção de trocar de 0 a 4 de suas cartas por novas do dealer de cada das três rodadas de desenho).
Se mais de um jogador ainda estiver ativo após todas essas rodadas, haverá um showdown, quando as mãos mais fortes vencerão as apostas apostadas.
O jogo é jogado com bola baixa, então a mão mais baixa vence e, como mencionado acima A
(ás), é baixa. Além disso, o ranking das mãos é diferente de outras formas de pôquer e pode ser um pouco confuso para iniciantes.
A "mão" jogada é a combinação mais baixa do ranking, feita com o maior número possível de cartas "off-suit" (todos os naipes diferentes) e "off-rank" (todas as classes diferentes) possíveis (das quatro cartas mantidas ) Ou seja: se alguém tem quatro cartas de naipes distintos e de posições distintas, tem uma mão de 4 cartas (chamada de "badugi"); se alguém não tem uma mão de 4 cartas, mas possui um conjunto ou três conjuntos de três cartas de naipes e posições distintas, tem uma mão de 3 cartas (escolhe o melhor); se alguém não tiver uma mão de 4 cartas ou uma mão de 3 cartas, provavelmente terá uma mão de 2 cartas, mas se não houver uma mão de 1 carta.
Como tal, a melhor mão possível é a mão de 4 card
4-3-2-A
- as mais baixas off-rank cartões de quatro naipes diferentes , muitas vezes chamado de "número 1". A mão mais fraca possível seria a mão de 1 cartaK
e só é possível segurando exatamenteKc Kd Kh Ks
.Observe que não
4c 3h 2c As
é um "número 1", já que são e são do mesmo naipe, mas é o mais forte das mãos de 3 cartas , ele empata com outros s (como ) e vence todas as outras mãos de 3 cartas, mas perde para todas as mãos de 4 cartas (o que pode ser tão fraco quanto ).4c
2c
3-2-A
3-2-1
Kh 3d 2s Ah
K-Q-J-T
- A outra mão possível de três cartas que poderia ser feita
4c 3h 2c As
é4-3-A
, mas que é mais fraca (mais alta), portanto não escolhida.
- A outra mão possível de três cartas que poderia ser feita
Da mesma forma,
8d 6h 3s 2h
uma mão de 3 cartas é jogada como8-3-2
- há duas combinações off-rank de naipe de tamanho 3 e8-3-2
é melhor (menor) do que8-6-3
desde que as três (ou "trey") são menores que as seis.
A comparação entre mãos segue a mesma lógica - qualquer 4 cartas vence qualquer 3, qualquer 3 vence qualquer 2 e qualquer 2 vence qualquer 1, enquanto mãos com o mesmo número de cartas usadas são comparado do mais alto ao mais baixo (por exemplo: 8-4-2
batidas, 8-5-A
mas não nenhuma 8-4-A
, 8-3-2
ou 7-6-5
)
O desafio:
Dadas duas coleções não ordenadas, cada uma das quatro cartas, identifique as que venceram o confronto Badugi (identifique ambas se for um empate).
A entrada pode ser qualquer coisa razoável:
- uma única sequência de todas as oito cartas, conforme indicado acima (com ou sem espaços), com as quatro esquerdas sendo uma mão e a direita a outra (com um separador opcional); ou uma lista de caracteres da mesma maneira
- uma lista de duas strings - uma por mão ou uma lista de listas de caracteres da mesma maneira
- duas seqüências de caracteres separadas ou entradas de lista, uma por mão
- as cartas nas mãos também já devem estar separadas (portanto, uma lista de listas de listas é boa)
Observe, no entanto:
- os cartões não podem ser organizados em nenhuma ordem antes da entrada
- ... e os naipes e posições são fixados como os rótulos de caracteres especificados aqui - Se o seu idioma não suportar tais construções, apenas sugira algo razoável e pergunte se é uma alternativa aceitável, considerando as restrições de seu idioma.
A saída deve ser
- formatado da mesma forma que a entrada ou uma representação impressa da mesma; ou
- ser um de três resultados distintos e consistentes (por exemplo:
"left"
,"right"
,"both"
; ou1
,2
,3
; etc.)
Realmente - desde que fique claro qual das duas entradas está sendo identificada, tudo bem.
Casos de teste
input -> output
(notes)
----------------------------------------------------------------------------
3c 2s 4d Ah - As 3h 2d 4h -> 3c 2s 4d Ah
(4-card 4-3-2-A beats 3-card 3-2-A)
3c 2s 4d Ah - As 2c 3d 4h -> 3c 2s 4d Ah - As 2c 3d 4h
(4-card 4-3-2-A draws with 4-card 4-3-2-A)
2d Ac 4h 3c - Kh Ad 9s 2c -> Kh Ad 9s 2c
(3-card 4-2-A loses to 4-card K-9-2-A)
Kc Tc Qc Jc - Ac Ad Ah As -> Ac Ad Ah As
(1-card T loses to 1-card A)
9c 9h Qc Qh - Qs Kh Jh Kd -> Qs Kh Jh Kd
(2-card Q-9 loses to 3-card K-Q-J)
2d 5h 7c 5s - 2h 3c 8d 6c -> 2d 5h 7c 5s
(3-card 7-5-2 beats 3-card 8-3-2)
3s 6c 2d Js - 6h Jd 3c 2s -> 6h Jd 3c 2s
(3-card 6-3-2 loses to 4-card J-6-3-2)
Ah 6d 4d Ac - 3h 2c 3s 2s -> 3h 2c 3s 2s
(2-card 4-A loses to 2-card 3-2)
2h 8h 6h 4h - 6d 2d 5d 8d -> 2h 8h 6h 4h - 6d 2d 5d 8d
(1-card 2 = 1-card 2)
Isso é código-golfe , portanto o código mais curto em bytes vence por idioma e o código mais curto em geral vence. Não deixe que os idiomas do golfe o impeçam de enviar para outros idiomas e ... divirta-se!
fonte
[['3c', '2s', '4d', 'Ah'], ['As', '3h', '2d', '4h']]
razoável?O
na frente.Respostas:
Perl 6 , 128 bytes
Experimente online!
Toma uma lista de mãos (também mais de duas) que são listas de cartas que são como strings
Kc
. Retorna os índices das mãos com a menor pontuação. Para duas mãos, isso ocorre(0)
se a primeira mão vencer,(1)
se a segunda mão vencer e o(0, 1)
empate.Explicado:
fonte
<...>
seu equipamento de teste se traduz em uma lista de strings? É algum tipo de açúcar que diz que o conteúdo deve ser dividido em espaços?<a b c>
para alémqw(a b c)
de Perl 5.JavaScript (ES6),
209202192182181 bytesGuardado 7 bytes graças a @Neil
Recebe entrada como uma matriz de matrizes de seqüências de caracteres. Retorna
true
se a primeira mão vencer,false
se a segunda mão vencer, ou2
em caso de empate.Casos de teste
Mostrar snippet de código
Como?
fonte
join
?Gelatina , 36 bytes
Uma ligação monadic tendo uma lista de duas listas de caracteres
- sendo cada um espaço separado representação da mão (por exemplo
"Ac 2d 4s 3h"
)retornar uma lista de dois números de identificação do vencedor (s) com
1
e qualquer perdedor com0
- ou seja,
[1, 0]
= ganhos esquerda;[0, 1]
= vitórias certas;[1, 1]
= desenhar.Experimente online! ou veja a suíte de testes .
Como?
fonte
Python 3 ,
207204 bytesExperimente online!
Guardado 3 bytes graças a Jonathan Frech
Retorna
1
se a primeira mão vencer,-1
se a segunda mão vencer e0
em caso de empate.A função
h
calcula uma lista que representa a mão.O lambda compara duas representações da mão. Eu acho que pode ser reduzido, mas eu queria retornar apenas três valores e não encontrei uma maneira mais simples de fazer comparação.
fonte
L=len
e substituindo todas as outras ocorrências delen
withL
.s=set()
pors={0}
eset(x)&s or
coms&set(x)or