Inspirado por este desafío y relacionado con este .
Antecedentes
Badugi [bæduːɡiː] es una variante de low-ball draw-poker.
¡El evento de $ 1K de la Copa Mundial de Poker Poker de Pokerstars comienza en 3 horas y necesitaré saber qué tan buenas son mis manos!
El juego utiliza una baraja estándar de 52 cartas de cuatro palos y trece rangos. Los trajes no están ordenados y deben estar etiquetados cdhs
; los rangos, ordenados de mayor K
a menor A
, son KQJT98765432A
. Como tal, el mazo completo puede representarse de la siguiente manera (espacio separado):
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
A cada jugador se le reparten cuatro cartas del mazo, hay cuatro rondas de apuestas con tres rondas de sorteo en el medio (un jugador siempre tiene cuatro cartas, tiene la opción de cambiar 0-4 de sus cartas con nuevas del crupier en cada una) de las tres rondas de dibujo).
Si más de un jugador sigue activo después de todas estas rondas, hay un enfrentamiento, con lo cual las manos más fuertes ganan las apuestas apostadas.
El juego se juega bajo, por lo que la mano más baja gana, y como se mencionó anteriormente A
(as) es bajo. Además, el ranking de manos es diferente de otras formas de póker, y puede ser algo confuso para los principiantes.
La "mano" jugada es la combinación de menor puntaje hecha del mayor número de cartas "fuera de palo" (todos diferentes palos) y "fuera de rango" (todos los diferentes rangos) posibles (de las cuatro cartas retenidas ) Es decir: si uno tiene cuatro cartas de dos palos distintos y rangos distintos, tiene una mano de 4 cartas (llamada "badugi"); si uno no tiene una mano de 4 cartas pero tiene un conjunto o conjuntos de tres cartas de ambos palos distintos y rangos distintos, uno tiene una mano de 3 cartas (uno elige su mejor); si uno no tiene una mano de 4 cartas o una mano de 3 cartas, probablemente tenga una mano de 2 cartas, pero si no tiene una mano de 1 carta.
Como tal, la mejor mano posible es la mano de 4 cartas
4-3-2-A
: las cartas fuera de rango más bajas de cuatro palos diferentes , a menudo denominadas "número 1". La mano más débil posible sería la mano de 1 cartaK
y solo es posible manteniendo exactamenteKc Kd Kh Ks
.Tenga en cuenta que no
4c 3h 2c As
es un "número-1", ya que el y son del mismo palo, pero es la más fuerte de las manos de 3 cartas , empata con otras s (como ) y supera a todas las otras manos de 3 cartas pero pierde a todas las manos de 4 cartas (que podría ser tan débil como ).4c
2c
3-2-A
3-2-1
Kh 3d 2s Ah
K-Q-J-T
- La otra mano posible de 3 cartas que podría hacerse
4c 3h 2c As
es4-3-A
, pero que es más débil (más alta), por lo que no se elige.
- La otra mano posible de 3 cartas que podría hacerse
Del mismo modo,
8d 6h 3s 2h
se juega una mano de 3 cartas, ya que8-3-2
hay dos combinaciones fuera de rango fuera del palo de tamaño 3 y8-3-2
es mejor (más bajo) que8-6-3
desde que las tres (o "trey") son más bajas que las seis.
La comparación de manos entre sí sigue la misma lógica: cualquier 4 cartas vence a cualquier 3 cartas, cualquier 3 cartas vence a cualquier 2 cartas y cualquier 2 cartas vence a cualquier 1 carta, mientras que las manos del mismo número de cartas usadas son comparado desde su rango más alto hasta su más bajo (por ejemplo: 8-4-2
latidos 8-5-A
pero ninguno de 8-4-A
, 8-3-2
o 7-6-5
)
El reto:
Dadas dos colecciones desordenadas de cada una de las cuatro cartas, identifique las que ganen un enfrentamiento de Badugi (identifique ambas si es un empate).
La entrada puede ser cualquier cosa razonable:
- una sola cadena de las ocho cartas como se etiqueta arriba (con o sin espacios) con las cuatro izquierdas como una mano y la derecha como la otra (con un separador opcional); o una lista de personajes de la misma manera
- una lista de dos cadenas, una por mano, o una lista de listas de caracteres de la misma manera
- dos cadenas separadas o entradas de lista, una por mano
- las tarjetas dentro de las manos también pueden estar separadas (por lo que una lista de listas de listas está bien)
Nota, sin embargo:
- las tarjetas no pueden organizarse en ningún orden antes de la entrada
- ... y los trajes y los rangos se arreglan como las etiquetas de caracteres especificadas aquí: si su idioma no admite tales construcciones, simplemente sugiera algo razonable y pregunte si es una alternativa aceptable dadas las limitaciones de sus idiomas.
La salida debería ser
- formateado igual que la entrada, o una representación impresa de la misma; o
- ser uno de tres resultados distintos y coherentes (por ejemplo:
"left"
,"right"
,"both"
, o1
,2
,3
, etc.)
Realmente, siempre que esté claro cuál de las dos entradas se está identificando, debería estar bien.
Casos de prueba
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)
Este es el código de golf , por lo que el código más corto en bytes gana por idioma, y el código más corto en general gana. No deje que los idiomas de golf lo pospongan en otros idiomas y ... ¡diviértase!
fuente
[['3c', '2s', '4d', 'Ah'], ['As', '3h', '2d', '4h']]
razonable?O
al frente.Respuestas:
Perl 6 , 128 bytes
Pruébalo en línea!
Toma una lista de manos (también más de dos) que son listas de cartas que son como cadenas
Kc
. Devuelve los índices de las manos con la puntuación más baja. Para dos manos esto es(0)
si la primera mano gana,(1)
si la segunda mano gana, y(0, 1)
para un empate.Explicado:
fuente
<...>
traduce en su arnés de prueba una lista de cadenas? ¿Es algún tipo de azúcar que dice que el contenido debe dividirse en espacios?<a b c>
ademásqw(a b c)
de Perl 5.JavaScript (ES6),
209202192182181 bytesGuardado 7 bytes gracias a @Neil
Toma la entrada como una matriz de matrices de cadenas. Devuelve
true
si gana la primera mano,false
si gana la segunda mano o2
en caso de empate.Casos de prueba
Mostrar fragmento de código
¿Cómo?
fuente
join
?Jalea , 36 bytes
Un enlace monádico que toma una lista de dos listas de caracteres
, cada una de las cuales es una representación de la mano separada por espacios (p
"Ac 2d 4s 3h"
. Ej. )Que devuelve una lista de dos números que identifican al ganador o ganadores
1
y a cualquier perdedor con0
, es decir, la
[1, 0]
izquierda gana;[0, 1]
= derecha gana;[1, 1]
= dibujar.Pruébalo en línea! o ver el conjunto de pruebas .
¿Cómo?
fuente
Python 3 ,
207204bytesPruébalo en línea!
Guardado 3 bytes gracias a Jonathan Frech
Devuelve
1
si gana la primera mano,-1
si gana la segunda mano y0
en caso de empate.La función
h
calcula una lista que representa la mano.La lambda compara dos representaciones de la mano. Creo que podría acortarse, pero quería devolver solo tres valores y no encontré una forma más simple de hacer una comparación.
fuente
L=len
y reemplazando todas las demás ocurrencias delen
conL
.s=set()
cons={0}
yset(x)&s or
cons&set(x)or