Desafío:
Dadas dos manos de cinco cartas, determina cuál gana por la clasificación estándar de manos de póker .
Entrada:
Diez cartas separadas por espacios de stdin o como argumentos de línea de comando, lo que prefiera. Las primeras cinco cartas son la mano del jugador 1, mientras que las últimas cinco son la mano del jugador 2. Cada tarjeta será una cadena de dos letras de la forma RS donde R es rango y S es palo. Los rangos van desde 2-9, T por diez y J, Q, K y A para Jack, Queen, King y Ace respectivamente. Los trajes son H, D, C, S para corazones, diamantes, tréboles y espadas respectivamente. Debes mostrar el número del jugador que gana: '1' o '2'.
Ejemplos de tarjetas:
AS - the Ace of Spades
QD - the Queen of Diamonds
2C - the Two of Clubs
TH - the Ten of Hearts
Ejemplos de entrada a salida:
5H 5C 6S 7S KD 2C 3S 8S 8D TD -> 2
Explicación: El jugador 1 tiene un par de Fives mientras que el jugador 2 tiene un par de ocho.
5D 8C 9S JS AC 2C 5C 7D 8S QH -> 1
Explicación: Ninguno de los jugadores tiene nada especial, pero la carta alta del Jugador 1 es un As, mientras que la carta alta del Jugador 2 es una Reina.
2D 9C AS AH AC 3D 6D 7D TD QD -> 2
Explicación: El jugador 1 tiene tres ases, el jugador 2 tiene un rubor de diamantes.
4D 6S 9H QH QC 3D 6D 7H QD QS -> 1
Explicación: Ambos jugadores tienen un par de reinas, pero la segunda carta más alta del jugador 1 es un nueve, mientras que el jugador 2 es un siete.
Reglas y aclaraciones:
- Consulte la clasificación estándar de manos de póker para obtener detalles sobre cómo comparar manos.
- Puede suponer que no hay cartas repetidas en cada par de manos.
- Puede suponer que hay un ganador definitivo en cada caso.
- El traje no tiene en cuenta el ranking de una mano. Por ejemplo, dos colores reales de diferentes palos son iguales (por lo tanto, cualquier entrada donde ambos jugadores tengan un color real no es válida según la regla anterior).
- Como se trata de un código de golf, gana la respuesta más corta.
Notas:
- Relacionado con esta pregunta y esta .
- Basado en el problema del proyecto Euler 54
Respuestas:
Haskell -
352339 caracteresCarreras:
Ungolf'd y comentó, para que pueda ver la técnica:
fuente
Python -
774722707698685 caracteresElegí generar una cadena para cada mano que lo represente, comenzando con un carácter para el tipo de mano, seguido de caracteres que describan la variación particular del tipo (por ejemplo, ¿de qué tarjeta tenía 4?), Seguido de los valores de las cartas restantes en caso de empate (si ambos jugadores tienen el mismo par doble, la quinta carta tendrá que decidir quién gana). Lo he probado bastante, pero en realidad no juego al póker, así que espero hacerlo bien. Además, sé que aún no está totalmente golfizado, probablemente pueda depilar algunas docenas de caracteres más adelante.
fuente
_=lambda c:chr(97+c)
. Además, tiene un espacio en blanco innecesario después de:
sy=
s. Finalmente, use en;
lugar de nuevas líneas para separar las declaraciones para reducir el espacio en blanco utilizado para la sangría.JavaScript -
526508uso:
sin golf:
fuente
fuente
Perl,
801733 caracteresCreo que esta es una implementación bastante sencilla. Básicamente, para cada mano, clasificamos los trajes y las caras por separado. Luego hacemos otra copia de las caras con ases contando bajo para poder verificar si hay rectas con ases bajos. Luego determinamos si tenemos color o escalera, y cuál es la carta alta. Luego, solo verificamos las coincidencias en orden de puntuación (primero verificamos los colores directos, luego cuatro tipos, etc.). El puntaje real es solo la concatenación del tipo de mano seguido de los valores nominales de las cartas en el orden en que importan (eso es _s () en la versión sin golf, u () en la versión de golf). Aquí está:
Y aquí está el equivalente menos golfizado:
fuente
AH 2C 3S 4S 5D 6C 7S 7C 7D TD
produce un resultado de2
, pero creo que una recta supera a tres de un tipo