La entrada será dos palabras de cinco letras. En realidad, no tienen que ser palabras de diccionario, solo cinco letras cada una, todas en minúsculas o mayúsculas, según su elección. Solo aparecerá AZ en las palabras de entrada y siempre tendrán 5 caracteres de longitud.
Su programa consiste en calificarlos a ambos como si fueran manos de póker y dar salida a la mano más alta. Por supuesto, los trajes no se aplicarán aquí, solo las clasificaciones, por lo que no hay rubores.
El sistema típico de clasificación de póker dice: '1 par', '2 pares', '3 de un tipo', 'recto', 'full house', '4 de un tipo', '5 de un tipo', y por supuesto existe la posibilidad de que la mano (o la palabra en este caso) no valga nada.
En el caso de los empates , las letras más cercanas a A se consideran más altas, por lo que un par de As supera a un par de Bs. En algunos casos, ambas manos pueden ser idénticas, pero en un orden diferente (o no), en ese caso, generar una mano o una versión recurrida de la misma.
Esta página externa contiene información sobre cómo identificar al ganador y, especialmente, aborda los lazos dentro de las clasificaciones específicas, en caso de que no esté familiarizado con la puntuación de las manos de póker.
En el caso de las rectas : las letras deben estar adyacentes en el alfabeto y no se les permite envolverlas. Entonces, 'defgh' en cualquier orden es una recta, 'xyzab' no lo es.
Ejemplos de cómo anotar una sola mano:
word | scored as
---------------------
ccccc | 5 of a kind <-- highest ranking
woooo | 4 of a kind
opopo | full house
vurst | straight
vovvu | 3 of a kind
ppoww | 2 pairs
upper | 1 pair
kjsdf | high card only (in this case D) <-- lowest ranking
Entonces el programa realmente producirá resultados como este:
input | output
-----------------------
voviu,kjsdf | voviu because a pair beats nothing
opoqo,upper | opoqo because 3 of a kind beats a pair
woooo,ggegg | ggegg because 4 Gs beats 4 Os
queue,hopup | queue because 2 pairs beats 1 pair
lodpl,ddkop | ddkop because pair DD beats pair LL
huhyg,hijht | huhyg both have pair HH, but G beats I
ddffh,ccyyz | ccyyz both have 2 pairs, but CC(yyz) beats DD(ffh)
okaok,nkunk | nkunk KK ties with KK, but NN beats OO
abcdf,bcdef | bcdef because it is a straight
qtery,retyq | qtery identical! so doesnt matter
abedc,vyxwz | abedc because it is a "higher" straight
hhhij,hijkl | hijkl because straight beats 3 of a kind
aaabb,zzzzz | zzzzz because nothing beats 5 of a kind
El orden de las letras tanto en la entrada como en la salida es irrelevante, por lo que el orden en la salida puede ser diferente al de la entrada, pero el mismo inventario de letras debe estar presente.
La salida debe contener exactamente cinco letras, ni más ni menos.
Se aplican las reglas habituales de codegolf. El código más corto gana.
JavaScript (
250247232 bytes)Código no protegido y casos de prueba en JSFiddle: https://jsfiddle.net/CookieJon/8yq8ow1b/
Ahorré algunos bytes gracias a @RickHitchcock. @StephenS & @Arnauld
fuente
s=0,h=0
=>s=h=0
Creox[v]=x[v]?++x[v]:1
puede llegar a serx[v]=(x[v]|0)+1
, ahorrando 3 bytes.Python 2.7,
242223 bytesSimilar en concepto básico a los ejemplos de JavaScript (ordenar por fuerza manual con una excepción para las rectas; luego por rango); pero aprovechando
collections.Counter
desafortunadamente,.most_common
no tiene el comportamiento deseado; así que tuve que agregar una clave de clasificación personalizada.Editar: un poco más de código de golf para recortar 19 bytes.
Código sin golf
fuente
Mathematica, 635 bytes
.
.
Formulario de entrada
fuente