Yahtzee es un juego que se juega con cinco dados de seis lados y una hoja de puntaje con trece cuadros diferentes para completar un puntaje. Cada cuadro tiene sus propias reglas de puntaje:
- 1s, 2s, 3s, 4s, 5s, 6s, todos los puntos de puntuación equivalen a la suma de los dados respectivos (es decir, una tirada de [3, 2, 3, 1, 5] obtenida como 3 se otorgará 6 puntos: 3 por cada 3).
- 3-of-a-kind y 4-of-a-kind (como suenan, tres o cuatro dados arrojaron el mismo) obtienen puntos equivalentes a la suma de los cinco dados.
- La casa llena (dos dados muestran un valor, los otros tres muestran otro) obtiene 25 puntos
- Las rectas pequeñas (cuatro valores consecutivos) obtienen 30 puntos
- La recta grande (todos los valores consecutivos) obtiene 40 puntos
- Yahtzee (todos los dados muestran el mismo valor) obtiene 50 puntos
La decimotercera (oportunidad) tiene sentido en el juego, pero no tanto para este desafío; Además, el juego tiene bonos para Yahtzees adicionales que no tienen sentido aquí. Porque el desafío es ...
Dado cinco dados como entrada (cinco enteros 1-6, la entrada, sin embargo, es conveniente, puede suponer que la entrada siempre es válida), genera la puntuación más alta posible para esa 'mano'. Para los propósitos de este desafío, solo los métodos de puntaje en la lista anterior son válidos (específicamente, el azar no es un cuadro de puntaje válido para este desafío). El puntaje debe salir como su valor numérico decimal, ya sea un entero o una representación de cadena del mismo, lo que sea. Debe ser inmediatamente reconocible como un número. El espacio en blanco inicial / final está bien, se trata de obtener la puntuación y no la presentación.
Codifique golf, de modo que gane la respuesta con la menor cantidad de bytes en un idioma determinado. Lagunas estándar prohibidas.
Casos de prueba
(Tenga en cuenta que todos estos son independientes, el desafío es anotar una 'mano' de dados):
in: 1 5 4 3 2
out: 40
in: 1 1 4 3 1
out: 10
in: 2 2 6 5 3
out: 6
in: 2 4 2 4 6
out: 8
in: 1 1 1 1 1
out: 50
in: 5 2 5 3 6
out: 10
in: 1 6 3 4 2
out: 30
in: 1 3 1 1 3
out: 25
in: 6 5 5 6 6
out: 28
in: 1 2 3 5 6
out: 6
Respuestas:
R ,
146141 bytesPruébalo en línea!
Superado por plannapus
Toma la entrada como una lista y devuelve la puntuación.
ungolfed un poco:
fuente
f(c(1,2,3,5,6))
falla: debería producir 6 y en su lugar, 30. Parece que esto se debe a que está contando cuántos pares (clasificación posterior) difieren en uno, que en realidad es cuatro para la secuencia anterior, aunque no es una recta de cuatro. Creo que me encontré con esto cuando hice esto como un ejercicio hace un tiempo, y probablemente debería añadir que como un caso de prueba ...Python 2 ,
187184167165 bytes-17 bytes gracias a @mypetlion
-2 bytes gracias a @chrstphrchvz
Pruébalo en línea!
fuente
R,
136134bytesGolfed 2 bytes gracias a @Giuseppe !
Sangrado,
Algunos casos de prueba:
fuente
factor
por un segundo caliente antes de distraerme. Pero creo que si utilizo su enfoque conz
(s
en mi respuesta), puedo jugar golf hasta 134 ...all(y<4&y-1)
y utilizando en*
lugar de[
, y configurando eny
línea en lugar de como un argumento de función, y todavía pasa todos los casos de prueba: ¡ Pruébelo en línea!max
y creo que salvó el byte de la configuración eny
línea.Lote, 359 bytes
Explicación:
Calcule el número de dados para cada número, más el máximo, más el total de todos los dados, más el total más alto de dados del mismo número.
Si todos los dados son diferentes, esto podría ser una larga recta, pero eso debe ser no
1
o no6
.De lo contrario, o si a lo sumo dos dados son iguales, entonces esto podría ser una recta corta. Debe haber al menos a
3
y a4
y también una combinación de los otros cuatro números.Si hay tres dados iguales, busque una casa llena, desde entonces
3^2==1
. Sin embargo, algunas casas completas, como 6s y 5s, obtienen una puntuación más alta como 3 de su tipo.De lo contrario, o si hay cuatro iguales, califique el total.
Y si hay cinco iguales, ¡entonces Yahtzee!
Salida de la mejor puntuación.
fuente
Jalea , 58 bytes
Pruébalo en línea!
fuente
25.0
mientras que ningún otro caso tiene el final.0
?2.5 × 10 = 25.0
(aritmética flotante), mientras que las demás30
se infieren como3 × 10 = 30
(aritmética de enteros).× 10
es de 2 bytes,2.5
es igual a 2 bytes25
y3,5,4
ahorra 3 bytes30,50,40
, por lo que 3 + 0 - 2 = 1 byte guardado.Perl 6 , 159 bytes
Pruébalo en línea!
Como la entrada puede ser aceptada "como sea conveniente", mi función la toma como una instancia de la
Bag
clase, que es un contenedor con multiplicidad. ABag
es también un contenedor asociativo;$bag{$key}
devuelve cuántas veces$key
ocurre en la bolsa.La mayor parte de la función es solo una lista de funciones que evalúan cada posible mano de Yahtzee, devolviendo el puntaje para esa mano o cero si no se cumplen las condiciones para la mano.
|(1..6).map({ *{$_} * $_ })
es una lista de seis funciones que evalúan las manos en base a corridas repetidas de los números 1-6. El líder|
aplana esta lista en la lista circundante.{.kxxv.sum * ?.values.grep(* > 2) }
evalúa las manos 3 y 4 de su tipo..kxxv
en unBag
devuelve las teclas repetidas con la multiplicidad de cada uno, recuperando la lista original de tiradas.sum
de dados y, por supuesto, suma los dados. Esa suma se multiplica por un valor booleano (?
) que es verdadero si las bolsas.values
(es decir, las multiplicidades) contienen un valor mayor que 2.{ 25 * (6 == [*] .values) }
evalúa la mano de la casa llena. 25 se multiplica por un valor booleano que es verdadero si el producto de las multiplicidades es 6, que para cinco dados solo puede suceder si uno es 3 y el otro es 2.30 * ?*{ 3 & 4 & (1 & 2 | 2 & 5 | 5 & 6) }
evalúa la pequeña mano recta. Es unaWhateverCode
función; La segunda estrella*
es laBag
. La expresión entre las llaves es la unión de los valores 3 y 4, y 1 y 2, o 2 y 5, o 5 y 6. Buscar esta unión en losBag
resultados en una unión de las multiplicidades correspondientes. Si las mulitplicities de 3 y 4, y al menos una de 1 y 2, o 2 y 5, o 5 y 6, son distintas de cero, la unión es verdadera cuando se convierte en un booleano (con?
), y este booleano se multiplica por 30 para obtener el puntaje40 * ?*{ 2 & 3 & 4 & 5 & (1 | 6) }
evalúa de manera similar la mano recta grande. Es más simple porque los dados deben incluir cada uno de los números 2-5 y 1 o 6.50 * (*.keys == 1)
evalúa la mano de Yahtzee. Es simplemente 50 veces un valor booleano que es cierto si el número de dados distintos es uno.fuente
Pip ,
6563 bytesToma los dados como cinco argumentos de la línea de comandos. Pruébalo en línea!
Ungolfed + explicación
(Esta es la versión original.)
fuente
Rubí , 184 bytes
Programa completo Para facilitar la prueba de entrada, agregue
$/=' '
en la parte superior para leer en el formato "dígito separado por espacios". (191 caracteres)Me propuse romper la barrera de 200 bytes y logré destruirla con una docena de bytes restantes, ¡con facilidad!
Pruébalo en línea!
Explicación
Sin embargo, no es muy bueno. Espero que tengas algún conocimiento de Ruby ~
fuente