Nombra la mano de póker
Dadas cinco cartas, muestra el nombre de la mano de póker, que será una de:
High card
One pair
Two pair
Three of a kind
Straight
Flush
Full house
Four of a kind
Straight flush
Royal Flush
En caso de duda, consulte las reglas en http://en.wikipedia.org/wiki/List_of_poker_hands .
Entrada
5 cartas de stdin o argumentos de línea de comandos. Una tarjeta es una cadena de dos letras en el formulario RS
, donde R es rango y S es palo. Los rangos son 2
: 9
(tarjetas de números), T
(diez), J
(Jack), Q
(Reina), K
(Rey), A
(As). Los trajes son S
, D
, H
, C
de picas, diamantes, corazones y clubes respectivamente.
Ejemplo de cartas
5H - five of hearts
TS - ten of spades
AD - ace of diamonds
Ejemplo de entrada => salida deseada
3H 5D JS 3C 7C => One pair
JH 4C 2C JD 2H => Two pair
7H 3S 7S 7D 7C => Four of a kind
8C 3H 8S 8H 3S => Full house
Reglas
El código más corto gana
Editar
¡Luce genial hasta ahora! Realmente no puedo verificar todas las respuestas, ya que no conozco muy bien estos idiomas y no tengo compiladores / intérpretes para todos ellos, pero sospecho que no todos han pensado que los Ases pueden ser tanto los mejores como los mejores. Las cartas más bajas de un Straight (color) .
Respuestas:
GolfScript (
209 208 207 206 200 199 197196 caracteres)Estoy explotando la libertad ofrecida para ajustar la capitalización: mi Straight Flush y Royal Flush capitalizan Flush para reutilizar la palabra del simple flush.
Nota: algunas versiones anteriores tenían errores: solo admitían full house cuando el par era de menor valor que el par real. Se pueden corregir reemplazando el espacio que separa
- 0
con a$
.Manifestación
fuente
.&
para encontrar los caracteres distintos en una cadena es un truco muy útil.Se me ocurrió una respuesta propia :)
Python -
312301298Crea una lista de 2x2 donde los índices de las dos dimensiones son controles booleanos para el vaciado y la recta. En el caso de ambos, verificamos si es una escalera real o simplemente una escalera de color. Para no enjuagar y no derecho, verificamos las otras manos:
m
yn
tiene la mayor y la segunda cantidad más alta de cartas del mismo rango; los nombres de las manos se almacenan en una lista con índices segúnm
. Las verificaciones secundarias dentro de los valores de esta lista se realizann
para separar un par de dos pares y tres de un tipo de la casa.Editar: ¡Gracias a Nolen Royality por un total de 20 personajes guardados!
fuente
m,n=g([c.count(x)for x in set(r)])
am,n=g(map(c.count,set(r)))
?Ruby 1.9 (
427359348338296292)EDITAR : arreglado para trabajar con ases bajos.
La idea básica es construir una matriz de la cantidad de cartas en cada rango, concatenar los dígitos en una cadena y luego ejecutar expresiones regulares para ver qué forma de mano encaja. Contamos el número de trajes distintos para determinar si se debe comparar con los diferentes colores (color, color recto, color real) o con las otras formas (todo lo demás).
Toma las tarjetas como argumentos de línea de comando separados, así:
fuente
C, 454 caracteres
Ejecutar desde la línea de comandos con tarjetas como argumentos, por ejemplo ./a.out 8C 3H 8S 8H 3S
Versión ampliada, con comentarios:
Ediciones:
fuente
Mathematica , 365
Aquí está mi opinión sobre la respuesta de David Carraher.
Se muestra con espacio en blanco para cierta legibilidad.
Versión de una línea:
fuente
_
lugar de{_,_,_,_}
K,
294295.
editar: Se agregó 1 carácter para rectas Ace-low
fuente
Python
334,326322caracteresSé que el último trazador de líneas se está volviendo bastante ilegible, pondré una versión sin golf cuando esté satisfecho con mi solución.
fuente
GolfScript,
258250 caracteresEl programa espera entrada en STDIN como se indicó anteriormente y salidas a STDOUT. Puede probar el código usted mismo .
Editar: Incorporado w0lf sugerencias.
fuente
" of a kind"
una variable, porque se usa dos veces."Straight"
AH KH 2C 3H 4H
se considera un Straight, pero debería ser una carta High.Mathematica -
500494465 caracteresEsta solución se basa en una demostración de póker de Ed Pegg, Jr. En esta versión, las tarjetas se tratan internamente como números en
Range[2,14]
Muestra de entradas, salidas:
Notas:
f: rubor
c: tarjetas (sin palo)
s: recto
t: {tarjetas, suites}
re:
fuente
JH 4C 2C JD TH
?