Este desafío es anotar una mano Cribbage. Si no juegas Cribbage, tienes algo que aprender a hacer. Jugamos con una baraja de póker estándar, y una mano consta de cuatro cartas más la "carta arriba". Hay dos tipos de mano: normal y una 'mano de cuna'.
Las tarjetas vienen en el formato vs
donde v
es uno de: A23456789TJQK
(T para diez) y s
es uno de SCDH
. Se le dará una mano en el formulario (por ejemplo)
AS 2D 3H JS | 4S
¿Dónde 4S
está la carta? Una mano de cuna tendrá el formato
JD 3C 4H 5H | 5S !
Las cartas de cara tienen un valor de 10, y el as tiene un valor de 1. La puntuación se realiza de la siguiente manera.
- Quince años: por cada subconjunto de cinco cartas cuya suma es 15, agregue dos puntos.
- Pares: por cada par de cartas con el mismo rango (sin valor), agregue dos puntos.
- Carreras: por cada carrera máxima de cartas consecutivas de longitud mayor a 2, agregue la longitud de la carrera en puntos.
- Flush: si las cinco cartas son del mismo palo, agrega cinco puntos. De lo contrario, si todas menos la carta ascendente son del mismo palo, agregue cuatro puntos. Si se trata de una mano de cuna, no se cuenta la variante de cuatro puntos.
- Nobs: si hay un jack en la mano con el mismo palo de la carta, agrega un punto.
Notas:
Los triples y los cuatro tipos no son especiales: hay tres pares en un triple, por lo que un triple vale 6 puntos.
Las carreras pueden superponerse. Por ejemplo,
AS AH 2D 3C | 2C
(una doble carrera doble) tiene cuatro carreras de longitud 3 y dos pares, por lo que vale 3 + 3 + 3 + 3 + 2 + 2 = 16 puntos.Solo se cuentan las carreras máximas, por
KS QD JD TC | 9S
lo que vale 5 puntos, ya que es una carrera de 5. Las sub-carreras no se cuentan.
Regla de la casa:
Es imposible anotar 19 puntos en una mano. En lugar de cero, informe un puntaje de 19.
Ejemplos:
5S 5H 5D JS | KS
21
AS 2D 3H JS | 4S !
9
JD 3C 4H 5H | 5S
12
9S 8S 7S 6S | 5H !
9
9S 8S 7S 6S | 5H
13
8D 7D 6D 5D | 4D !
14
8D 7D 6D 5D | 4D
14
AD KD 3C QD | 6D
19
Este es el código de golf. La solución más corta gana.
Respuestas:
GolfScript,
187178174 caracteresComo nunca jugué al cribbage, no conozco ningún truco de puntuación elegante. Por lo tanto, pensé que la única forma de competir (al menos un poco) es usar un lenguaje de golf. El código es bastante simple GolfScript, los casos de prueba se pueden encontrar aquí .
El código de una manera más fácil de leer ( reformateado y ungolfing un poco ):
Editar: Se modificó la lógica para los quince y los rubores.
fuente
C,
364388caracteresEs grande y feo (aunque no tan grande como lo era antes):
(Se agregaron saltos de línea para que sea más fácil de leer; esos no están incluidos en el recuento anterior).
La descripción del problema no especificaba si el código necesitaba verificar entradas no válidas, por lo que naturalmente asumí que el programa era libre de portarse mal a voluntad si la entrada, por ejemplo, contenía espacios en blanco adicionales.
Aquí está la versión sin golf:
fuente
Ruby 1.9,
359356Es demasiado tiempo, casi tanto como la solución C.
fuente
Algo para empezar ... Ruby,
422 365 355352Ligeramente incólume:
Pruebas unitarias para la versión de golf:
Resultados:
fuente
Python, 629 caracteres
Solo estoy publicando el mío porque nadie más lo ha hecho. Es bastante largo :(
fuente
print s or 19
? Creo que también puedes usar Python 3.xy eliminar 3 caracteres más (raw_input
ainput
, luegoprint s or 19
aprint(s or 19)
).Python 2,
606584 bytesGuardado 22 bytes debido al golf de Jo King .
Pruébalo en línea!
Un poco más corto que la respuesta de grc , y toma una ruta diferente para llegar allí.
Explicación:
Explicación para ejecuciones lógicas específicamente:
fuente
if
s para llegar a 584 bytesStax , 106 bytes
¡Ejecute y depure en línea!
Bonificación por CP437: ¿Ves el símbolo de esos trajes en el Stax empaquetado? Lástima que los clubes no aparezcan ...
El equivalente ASCII es
Explicación
fuente