Sua tarefa é resumir e obter a pontuação de um jogador em um jogo de boliche de 10 pinos após até 21 jogadas .
Os rolos são representados como uma sequência de números inteiros no seu método preferido de entrada . Cada número inteiro corresponde ao número de pinos que foram derrubados nesse rolo.
Pontuação
Após cada rodada, o número de pinos derrubados nessa rodada é contabilizado na pontuação final. Se um jogador derruba todos os dez pinos no primeiro lançamento de uma rodada, isso é um golpe e a rodada termina. Caso contrário, a rodada dura mais um rolo. Se o segundo rolo de uma rodada derrubar todos os pinos restantes, isso é uma reposição .
Para cada ataque, há um bônus igual à soma dos pinos derrubados nas duas próximas jogadas. Para cada reposição, há um bônus igual ao número de pinos derrubados no próximo rolo.
Na 10ª e última rodada, o jogador pode receber jogadas extras: no caso de um ataque, o jogador recebe mais duas jogadas para compensar seu bônus de ataque. Em caso de reposição, o jogador recebe mais uma jogada.
Exemplos
Input: 4 3 8 2 7 1 10 7 3 0 10 2 2 10 10 5 4
Output: 131
Input: 10 10 9 1 7 3 2 7 10 1 9 10 7 1 10 10 10
Output: 183
Regras
- Você pode assumir que a entrada é válida.
- De acordo com o comentário de Mego, afrouxei os requisitos para os métodos de entrada / saída para atender nosso padrão atual .
- Respostas em idiomas mais recentes que o desafio são permitidas
- O menor código vence!
space separated integers
?Respostas:
GolfScript,
5041 caracteresOutra tentativa no GolfScript ( execute-o online ).
Segue uma explicação do código. A solução utiliza a natureza da pilha do problema (consumir rolos um após o outro), mas, portanto, a entrada deve ser revertida.
Versão anterior:
fonte
Python,
11611010510310099 caracteresGastar 30 caracteres na entrada é cansativo. Sugestões são bem-vindas.
Muito obrigado a Howard por melhorias.
fonte
1+(z[i]!=10)
por2-(z[i]>9)
para salvar um caractere.i
completamente (definido como 0) e em vez dei+=...
usoz=z[2-(z[0]>9)::];
z=input()
deve ser fino (tendo efetivamente uma representação em cadeia de uma lista deint
s eeval
ing-lo). No entanto, os programas completos devem sair em algum lugar (acho que também foi esse o caso naquela época). Como tal, eu acredito que este pode ser alterado para este programa 78 byteR, 101 bytes
Não sei por que esse desafio foi ultrapassado, mas eu gosto, então vou responder de qualquer maneira tarde.
Experimente online!
Ungolfed:
Função recursiva. Toma
x
como entrada, que contém as pontuações. Inicializa oss
núcleos ec
onça a quantidade de rodadas lançadas.A instrução if verifica se 10 rodadas são lançadas ou se
x
está vazia. Se for esse o caso, a pontuação é retornada. Caso contrário, a função se chamará da seguinte maneira:Ele remove os arremessos de
x
, verificando se é um ataque ou não. Nesse caso, a primeira entrada é removida, e as duas primeiras.(S=x[1]!=10)
verifica se há greves. Removemos o-
índice ( )0:S
, ondeS
é 1 se for um aviso e 0 se não. E, então, adicionar um:-(0:(x[1]!=10)+1)
. Passamos o encurtadox
para a próxima ligação.Quanto à pontuação, isso é encontrado
x[1:2]
se for um turno regular ex[1:3]
se for um ataque ou um sobressalente. Verificamos sesum(x[1:2])
é maior ou igual a 10. Se for uma greve, obviamente este é o caso. Se é um sobressalente, isso também funciona. Portanto, se isso é VERDADEIRO, adicionamosx[3]
à soma. Isso é então adicionado as
.fonte
CoffeeScript (
234215170)EDIT : Uma reescrita robusta, plagiando descaradamente a grande abordagem baseada em pilha de Howard. Estou confiante de que mais pode ser retirado para acessar o último elemento de uma matriz sem destruí-lo ...
fonte
Ruby, 252 bytes
Aceita entrada em uma matriz, adicione todos os elementos primeiro e, em seguida, procure por bônus de reposição e greve
fonte
PHP, 82 bytes
recebe entrada de argumentos de linha de comando; executar
-nr
ou testá-lo online .demolir
fonte
Perl 5 , 65 + 2 = 67 bytes
Requer
-ap
sinalizadoresExperimente online!
fonte
Geléia ,
3635 bytesUm link monádico que aceita uma lista de números inteiros e retorna um número inteiro.
Experimente online!
Quão?
Calcula a pontuação de cada execução sobreposta de três tigelas como se fosse uma que começou no início de um quadro e, opcionalmente, acrescenta um identificador de ocorrência (
-1
ocorrência ), aplaina essa lista resultante, divide-a nos identificadores de ocorrência e descarta cada segundo resultado de cada pedaço (removendo a pontuação das corridas que realmente não começaram com o início de um quadro).Para atender ao quadro final, um zero é anexado primeiro à entrada (para permitir que o fatiamento em três sentidos permita que um quadro comece no que era a penúltima tigela) e as pontuações resultantes são truncadas para os dez primeiros (para remover o agora possível falso quadro 11) antes de resumir.
fonte
Perl, 140?
Primeira tentativa:
Infelizmente, há certos casos em que falha. Eu irei refazê-lo mais tarde.
fonte