Introducción
Dice 10,000 es un juego de dados que se puede jugar con 6 dados y algo para escribir. Los jugadores tiran los dados varias veces por turno y obtienen un puntaje al final. El jugador que alcanza los 10.000 puntos primero gana el juego. Calcular el puntaje de un rollo es tu trabajo en este desafío.
Mira aquí las reglas completas.
Tenga en cuenta que las reglas (especialmente la puntuación) cambian de región a región ya que el juego es ampliamente conocido. Usamos las reglas descritas a continuación.
El reto
Dada una lista de seis números del uno al seis que representan una tirada de dados, genera su puntaje. La puntuación se calcula de la siguiente manera:
- Unos cuenta 100 puntos
- Fives cuenta 50 puntos
- Los trillizos cuentan su número multiplicado por 100 puntos. Tres dos por ejemplo dan 200 puntos. Una excepción son tres que cuentan 1000 puntos.
- Seis del mismo número cuentan como dos trillizos como se describió anteriormente. Entonces seis tres dan 600 puntos. Lo mismo ocurre con el caso límite: los seis son 2.000 puntos.
- Un dado no puede usarse más de una vez. Si un dado es parte de un triplete, no cuenta para otras puntuaciones. Los cinco en un triplete no cuentan 50 puntos además de los 500 puntos que dan.
- Los triples siempre se cuentan primero para maximizar la puntuación. Entonces tres cinco nunca se cuentan como 150 puntos. Cuatro cinco se cuentan como un triplete y un cinco ordinario que luego da 550 puntos.
Notas
- La entrada siempre contendrá seis números del uno al seis. No recibirá entradas inválidas.
- Los números pueden estar en cualquier orden. No puede asumir ningún pedido específico.
Reglas
- El formato de entrada depende de usted siempre que no esté preprocesado.
- Función o programa completo permitido.
- Reglas predeterminadas para entrada / salida.
- Se aplican lagunas estándar .
- Este es el código de golf , por lo que gana el conteo de bytes más bajo. Tiebreaker es una presentación anterior.
Casos de prueba
[1, 2, 3, 4, 5, 6] -> 150 [1, 1, 1, 2, 3, 5] -> 1050 [1, 1, 1, 1, 1, 1] -> 2000 [2, 2, 2, 2, 2, 2] -> 400 [6, 6, 1, 5, 5, 6] -> 800 [2, 3, 4, 6, 2, 4] -> 0 [1, 5, 1, 5, 1, 5] -> 1500 [5, 5, 5, 5, 2, 3] -> 550 [1, 1, 1, 1, 1, 5] -> 1250 [3, 3, 4, 4, 3, 4] -> 700
Respuestas:
05AB1E ,
343130 bytesExplicación
Pruébalo en línea
fuente
Python 2,
152148125 bytesSolución bastante simple. Se puede jugar más al golf.
L.count
es un poco largo, pero no pude eliminar la primera llamada porque L está actualizada.Pruébelo en línea - (todos los casos de prueba)
Sin golf:
Algún crédito de golf a @Copper , usando algunos consejos de su código
fuente
PowerShell
v2 +v3 +,de 147144137133 bytesTachado 144 se parece un poco a 144?
Toma información
$args[0]
ysort
la guarda, la almacena$n
. Luego,while
todavía quedan elementos, evaluamos unif
/else
.Si el primer elemento (temperatura almacenada
$x
para guardar algunos bytes) coincide con el tercer elemento, tenemos un triple. Agregue a$s
um el resultado de alguna multiplicación100*$x
más un booleano900
solo si$x
es-eq
ual1
. Esto nos da el requisito1000
para tres. Luego, retire los primeros dos elementos en$a
, y$b
, y el resto en$n
- la eliminación del tercer elemento del triple se maneja más tarde.De lo contrario, no tenemos un triple, así que agregue a
$s
um el resultado de otra adición basada en Boole. Agregamos50
si$x
es uno1
o5
, luego agregamos otro50
si es-eq
normal1
. Esta sección ahora requiere v3 + para el-in
operador.En cualquier caso, todavía tenemos un elemento que eliminar, así que retire el primer elemento
$a
y deje el resto$n
.Finalmente, una vez que finalice el bucle, colóquelo
$s
en la tubería. La salida es implícitaWrite-Output
al final de la ejecución.Casos de prueba
fuente
JavaScript (ES6),
8786 bytesOrdena y stringifica la entrada para que las combinaciones de puntuación se puedan identificar mediante regexp. Editar: guardado 1 byte gracias a @Arnauld.
fuente
s>>7
en lugar des>111
guardar un byte en la primera versiónPython 2 o 3,
123 122 121 116 109 108 104 102 10097 bytesPython 2, 97 bytes
Los casos de prueba están en ideona
Python 3, 97 bytes
fuente
Rubí,
8078 bytesPruébalo en línea!
-2 bytes de @ezrast.
fuente
i<2&&i=10
te ahorra 2 bytes.Haskell,
130123 bytesEsto no es un desafío para Haskell. También estoy jugando al golf.
Gracias a @nimi.
fuente
Javascript (ES6),
8584 bytesCasos de prueba:
fuente
Python 3, 131 bytes
Esta es una expresión lambda; para usarlo, asígnelo anteponiendo
f=
.Primero buscamos triples dos veces (usando el módulo), eliminando los triples a medida que avanzamos; entonces simplemente agregamos los recuentos de
5
y1
al puntaje y lo devolvemos.Pruébalo en Ideone!(con todos los casos de prueba)
Aquí está mi presentación anterior de Python 2:
Python 2,
176172171145136134133 bytes¡Ahorré un byte en la solución Python 2 gracias a @ mbomb007!
fuente
print s
es más corto en Python 2.BASH (sed + bc) 161
Quería hacerlo todo en sed, pero la adición es realmente difícil ...
Explicación:
00
al primer número y elimine el otro,por ejemplo,
1 2 1 3 1 4
->100 2 3 4
10
con1
luego1
con,100
por ejemplo,
100
->10
->1000
o1
->1
->100
5
no seguido de0
con50
0
+
+
s iniciales y finales0
bc
agregar todo.fuente
Perl, 69 bytes
Incluye +2 para
-ap
Ejecutar con la entrada en STDIN:
dice10000.pl
:fuente
C # (.NET Core) ,
228227 bytesPruébalo en línea!
Siento que me estoy perdiendo muchas, muchas optimizaciones posibles aquí, pero yo hice guardar un byte multiplicando por 10 al final. La entrada debe pasarse como argumentos de línea de comando separados.
fuente
Perl 5
-ap
, 78 bytesPruébalo en línea!
fuente