Introdução
Dados 10.000 é um jogo de dados que pode ser jogado com 6 dados e algo para escrever. Os jogadores jogam os dados várias vezes por turno e ganham uma pontuação no final do mesmo. O jogador que atingir 10.000 pontos ganha primeiro o jogo. Calcular a pontuação de um rolo é o seu trabalho neste desafio.
Veja aqui as regras completas.
Observe que as regras (principalmente a pontuação) mudam de região para região, já que o jogo é amplamente conhecido. Usamos as regras descritas abaixo.
O desafio
Dada uma lista de seis números de um a seis, representando uma jogada de dados, mostre sua pontuação. A pontuação é calculada da seguinte maneira:
- Uns contam 100 pontos
- Cincos conta 50 pontos
- Os trigêmeos contam seu número vezes 100 pontos. Três duplas, por exemplo, dão 200 pontos. Uma exceção são três que contam 1000 pontos.
- Seis do mesmo número contam como dois trigêmeos, como descrito acima. Então, seis três dão 600 pontos. O mesmo vale para os casos extremos: seis são 2.000 pontos.
- Um dado não pode ser usado mais de uma vez. Se um dado faz parte de um trigêmeo, ele não conta para outras pontuações. Os cincos em um trigêmeo não contam 50 pontos além dos 500 pontos que dão.
- Os triplos são sempre contados primeiro para maximizar a pontuação. Portanto, três cincos nunca são contados como 150 pontos. Quatro cincos são contados como um trigêmeo e um cinco ordinário, o que dá 550 pontos.
Notas
- A entrada sempre conterá seis números de um a seis. Você não receberá entradas inválidas.
- Os números podem estar em qualquer ordem. Você não pode assumir pedidos específicos.
Regras
- O formato de entrada é com você, desde que não seja pré-processado.
- Função ou programa completo permitido.
- Regras padrão para entrada / saída.
- Aplicam-se brechas padrão .
- Isso é código-golfe , portanto, a menor contagem de bytes vence. O desempate é uma submissão anterior.
Casos de teste
[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
Respostas:
05AB1E ,
343130 bytesExplicação
Experimente online
fonte
Python 2,
152148125 bytesSolução bastante simples. Pode ser jogado mais.
L.count
é um pouco longo, mas não pude remover a primeira chamada porque L é atualizado.Experimente online - (todos os casos de teste)
Ungolfed:
Algum crédito de golfe para @Copper , usando algumas dicas de seu código
fonte
PowerShell
v2 +v3 +,147144137133 bytesRiscado 144 parece meio que 144?
Pega
$args[0]
e inseresort
, armazena$n
. Então,while
ainda existem elementos restantes, avaliamos umif
/else
.Se o primeiro elemento (temp armazenado em
$x
para salvar alguns bytes) corresponder ao terceiro, teremos um triplo. Adicione ao$s
hum o resultado de alguma multiplicação100*$x
mais um baseado em booleano900
apenas se$x
for-eq
necessário1
. Isso nos dá o requisito1000
para três. Em seguida, retire os dois primeiros elementos para$a
, e$b
, e o restante para$n
- remover o terceiro elemento do triplo é tratado posteriormente.Caso contrário, não temos um triplo, então adicione a
$s
hum o resultado de outra adição baseada em booleano. Adicionamos50
if$x
é um1
ou5
, e depois adicionamos outro50
se for-eq
necessário1
. Esta seção agora requer a v3 + para o-in
operador.Em ambos os casos, ainda temos um elemento ainda para remover, assim que descolar o primeiro elemento em
$a
e deixar o restante no$n
.Finalmente, quando o loop estiver concluído, coloque
$s
no pipeline. A saída é implícitaWrite-Output
no final da execução.Casos de teste
fonte
JavaScript (ES6),
8786 bytesClassifica e especifica a entrada para que as combinações de pontuação possam ser identificadas por meio de regexp. Editar: salvou 1 byte graças a @Arnauld.
fonte
s>>7
em vez des>111
salva um byte na primeira versãoPython 2 ou 3,
123 122 121 116 116 108 108 102 102 10097 bytesPython 2, 97 bytes
Os casos de teste são em ideone
Python 3, 97 bytes
fonte
Ruby,
8078 bytesExperimente online!
-2 bytes de @ezrast.
fonte
i<2&&i=10
economiza 2 bytes.Haskell,
130123 bytesIsto é não um desafio para Haskell. Também estou no golfe isso.
Graças a @nimi.
fonte
Javascript (ES6),
8584 bytesCasos de teste:
fonte
Python 3, 131 bytes
Esta é uma expressão lambda; para usá-lo, atribua-o anexando
f=
.Primeiro, checamos triplos duas vezes (usando o módulo), removendo os triplos à medida que avançamos; basta adicionar as contagens de
5
e1
à pontuação e a devolvemos.Experimente no Ideone!(com todos os casos de teste)
Aqui está o meu envio mais antigo do Python 2:
Python 2,
176172171145136134133 bytesEconomizei um byte na solução Python 2 graças a @ mbomb007!
fonte
print s
é menor em Python 2.BASH (sed + bc) 161
Eu queria fazer tudo no sed, mas a adição é realmente difícil ...
Explicação:
00
ao primeiro número e remova o outro,por exemplo
1 2 1 3 1 4
- ->100 2 3 4
10
por1
então1
por,100
por exemplo,
100
->10
->1000
ou1
->1
->100
5
não seguido por0
com50
0
+
+
s0
bc
adicione para adicionar tudo.fonte
Perl, 69 bytes
Inclui +2 para
-ap
Execute com a entrada em STDIN:
dice10000.pl
:fonte
C # (.NET Core) ,
228227 bytesExperimente online!
Eu sinto que eu estou perdendo muitas, muitas otimizações em potencial aqui, mas eu fiz salvar um byte multiplicando por 10 no final. A entrada deve ser passada como argumentos de linha de comando separados.
fonte
Perl 5
-ap
, 78 bytesExperimente online!
fonte