Yahtzee é um jogo jogado com cinco dados de seis lados e uma folha de pontuação com treze caixas diferentes para preencher uma pontuação. Cada caixa tem suas próprias regras de pontuação:
- 1s, 2s, 3s, 4s, 5s, 6s marcam todos os pontos iguais à soma dos dados respectivos (ou seja, uma jogada de [3, 2, 3, 1, 5] pontuada como 3s recebe 6 pontos: 3 para cada 3).
- 3 do tipo e 4 do tipo (como soam, três ou quatro dados rolam o mesmo) marcam pontos iguais à soma dos cinco dados.
- Full house (dois dados mostram um valor, os outros três mostram outro) obtém 25 pontos
- Pequena sequência (quatro valores consecutivos) marca 30 pontos
- Reta grande (todos os valores consecutivos) marca 40 pontos
- Yahtzee (todos os dados mostram o mesmo valor) obtém 50 pontos
A décima terceira (chance) faz sentido no jogo, mas não tanto para esse desafio; Além disso, o jogo tem bônus para Yahtzees extras que não fazem sentido aqui. Porque o desafio é ...
Dado cinco dados como entrada (cinco inteiros de 1 a 6, porém, a entrada é conveniente, você pode assumir que a entrada é sempre válida), produza a pontuação mais alta possível para essa 'mão'. Para os propósitos deste desafio, apenas os métodos de pontuação na lista acima são válidos (especificamente, a chance não é uma caixa de pontuação válida para esse desafio). A pontuação deve ser exibida como seu valor numérico decimal, seja um número inteiro ou uma representação de sequência, seja qual for. Deve ser imediatamente reconhecido como um número. O espaço em branco à esquerda / à direita é bom, trata-se de obter a pontuação e não a apresentação.
Código golf, para que a resposta com o menor número de bytes em um determinado idioma ganhe. Falhas padrão proibidas.
Casos de teste
(Observe que todos são independentes, o desafio é marcar uma 'mão' 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
Respostas:
R ,
146141 bytesExperimente online!
Superado por plannapus
Pega a entrada como uma lista e retorna a pontuação.
um pouco destruído:
fonte
f(c(1,2,3,5,6))
falha - deve render 6 e, ao invés, render 30. Parece que é porque você está contando quantos pares (pós-classificação) diferem por um, o que é de fato quatro para a sequência acima, mesmo que não seja uma sequência de quatro. Eu acho que eu corri para este quando eu fiz isso como um exercício um tempo atrás, e eu provavelmente deveria acrescentar que, como um caso de teste ...Python 2 ,
187184167165 bytes-17 bytes graças a @mypetlion
-2 bytes graças a @chrstphrchvz
Experimente online!
fonte
R,
136134 bytesJoguei 2 bytes graças a @ Giuseppe !
Recuado,
Alguns casos de teste:
fonte
factor
por um segundo quente antes de me distrair. Mas eu acho que se eu usar a sua abordagem comz
(s
na minha resposta), eu posso mina de golfe até 134 ...all(y<4&y-1)
e usando em*
vez de[
e definindoy
inline em vez de como argumento de função, e ele ainda passa em todos os casos de teste: Experimente online!max
e acho que salvou o byte da configuraçãoy
inline.Lote, 359 bytes
Explicação:
Calcule o número de dados para cada número, mais o máximo, mais o total de todos os dados, mais o total mais alto de dados do mesmo número.
Se todos os dados forem diferentes, pode ser uma longa sequência, mas é preciso que exista ou não
1
ou não6
.Caso contrário, ou se, no máximo, dois dados forem iguais, ainda pode ser uma sequência curta. Deve haver, pelo menos, um
3
e um4
e também uma combinação dos outros quatro números.Se houver três dados iguais, verifique se há um full house desde então
3^2==1
. No entanto, algumas casas completas, como 6s e 5s, têm pontuação mais alta como 3-de-um-tipo.Caso contrário, ou se houver quatro iguais, marque o total.
E se houver cinco iguais, então Yahtzee!
Saída a melhor pontuação.
fonte
Geléia , 58 bytes
Experimente online!
fonte
25.0
enquanto nenhum outro caso tem o rastro.0
?2.5 × 10 = 25.0
(aritmética de flutuação), enquanto os outros30
são inferidos como3 × 10 = 30
(aritmética de número inteiro).× 10
são 2 bytes,2.5
são 2 bytes iguais25
e3,5,4
economizam 3 bytes30,50,40
, então 3 + 0 - 2 = 1 byte salvo.Perl 6 , 159 bytes
Experimente online!
Como a entrada pode ser aceita "por mais conveniente que seja", minha função a toma como uma instância do
Bag
classe, que é um contêiner com multiplicidade. ABag
também é um contêiner associativo;$bag{$key}
retorna quantas vezes$key
ocorre na bolsa.A maior parte da função é apenas uma lista de funções que avaliam cada mão Yahtzee possível, retornando a pontuação dessa mão ou zero se as condições da mão não forem atendidas.
|(1..6).map({ *{$_} * $_ })
é uma lista de seis funções que avaliam ponteiros com base em repetidas execuções dos números 1-6. A liderança|
nivelam essa lista na lista ao redor.{.kxxv.sum * ?.values.grep(* > 2) }
avalia as mãos 3 e 4 do mesmo tipo..kxxv
em aBag
retorna as chaves repetidas com a multiplicidade de cada uma, recuperando a lista original de rolagens e.sum
claro, somando os dados. Essa soma é multiplicada por um valor booleano (?
) que é verdadeiro se as bolsas.values
(ou seja, as multiplicidades) contiverem um valor maior que 2.{ 25 * (6 == [*] .values) }
avalia a mão da casa cheia. 25 é multiplicado por um valor booleano que é verdadeiro se o produto das multiplicidades for 6, o que para cinco dados só pode acontecer se um for 3 e o outro for 2.30 * ?*{ 3 & 4 & (1 & 2 | 2 & 5 | 5 & 6) }
avalia a mão pequena e reta. É umaWhateverCode
função; a segunda estrela*
é aBag
. A expressão entre chaves é a junção dos valores 3 e 4, e 1 e 2, ou 2 e 5, ou 5 e 6. Procurar essa junção nosBag
resultados em uma junção das multiplicidades correspondentes. Se as múltiplas multiplicidades de 3 e 4 e pelo menos uma de 1 e 2, ou 2 e 5, ou 5 e 6 forem diferentes de zero, a junção será verdadeira quando forçada a um valor booleano (com?
), e esse booleano é multiplicado por 30 para obter a pontuação.40 * ?*{ 2 & 3 & 4 & 5 & (1 | 6) }
avalia da mesma forma a mão grande e reta. É mais simples, porque os dados devem incluir cada um dos números 2-5 e 1 ou 6.50 * (*.keys == 1)
avalia a mão Yahtzee. É simplesmente 50 vezes um valor booleano que é verdadeiro se o número de dados distintos for um.fonte
Pip ,
6563 bytesToma os dados como cinco argumentos de linha de comando. Experimente online!
Ungolfed + explicação
(Esta é a versão original.)
fonte
Ruby , 184 bytes
Programa completo. Para facilitar o teste de entrada, adicione
$/=' '
no topo a leitura no formato "dígito separado por espaços". (191 caracteres)Estabeleci a quebra da barreira de 200 bytes e consegui destruí-la com uma dúzia de bytes restantes, com facilidade!
Experimente online!
Explicação
Não é muito bom embora. Espero que você tenha algum conhecimento sobre Ruby ~
fonte