Su tarea es resumir y obtener el puntaje de un jugador en un juego de bolos de 10 pines después de hasta 21 tiradas .
Los rollos se representan como una secuencia de enteros en su método de entrada preferido . Cada número entero corresponde al número de pines que fueron derribados en ese rollo.
Tanteo
Después de cada ronda, el número de pines derribados en esa ronda se cuenta en la puntuación final. Si un jugador derriba los diez pines en la primera tirada de una ronda, esto es un strike , y la ronda ha terminado. De lo contrario, la ronda dura un rollo más. Si el segundo lanzamiento de una ronda derriba todos los pasadores restantes, este es un repuesto .
Por cada golpe hay una bonificación igual a la suma de pines derribados en las dos tiradas siguientes. Para cada repuesto hay una bonificación igual al número de pines derribados en la próxima tirada.
La décima y última ronda, el jugador puede recibir tiradas adicionales: en caso de un golpe, el jugador obtiene dos tiradas más para compensar su bonificación de golpe. En caso de repuesto, el jugador obtiene una tirada más.
Ejemplos
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
Reglas
- Puede suponer que la entrada es válida.
- Según el comentario de Mego, he aflojado los requisitos para que los métodos de entrada / salida cumplan con nuestro estándar actual .
- Se permiten respuestas en idiomas más nuevos que el desafío.
- ¡El código más corto gana!
space separated integers
?Respuestas:
GolfScript,
5041 caracteresOtro intento en GolfScript ( ejecútelo en línea ).
Una explicación del código sigue. La solución utiliza la naturaleza de la pila del problema (consume rollos uno tras otro) pero, por lo tanto, la entrada debe invertirse.
Versión previa:
fuente
Python,
11611010510310099 caracteresGastar 30 caracteres en la entrada es molesto. Sugerencias bienvenidas.
Muchas gracias a Howard por las mejoras.
fuente
1+(z[i]!=10)
con2-(z[i]>9)
para guardar un personaje.i
completo (establecido en 0) y en lugar dei+=...
usarloz=z[2-(z[0]>9)::];
z=input()
deberían estar bien (tomando efectivamente una representación en cadena de una lista deint
syeval
). Sin embargo, los programas completos deberían aparecer en algún lugar (creo que también era el caso en ese entonces). Como tal, creo que esto puede cambiarse a este programa de 78 bytesR, 101 bytes
No estoy seguro de por qué este desafío fue rechazado, pero me gusta, así que responderé tarde de todos modos.
Pruébalo en línea!
Sin golf:
Función recursiva. Toma
x
como entrada, que contiene los puntajes. Inicializa loss
núcleos yc
muestra la cantidad de rondas lanzadas.La instrucción if verifica si se lanzan 10 rondas o si
x
está vacía. Si ese es el caso, se devuelve el puntaje. De lo contrario, la función se llamará a sí misma de la siguiente manera:Elimina los lanzamientos
x
, verificando si es un strike o no. Si es así, se elimina la primera entrada, de lo contrario, las dos primeras.(S=x[1]!=10)
comprueba huelgas. Eliminamos el-
índice ( )0:S
, dondeS
es 1 si es un strike y 0 si no. Y luego añadimos uno:-(0:(x[1]!=10)+1)
. Pasamos el acortadox
a la próxima llamada.En cuanto al puntaje, esto se encuentra tomando
x[1:2]
si es un turno regular yx[1:3]
si es un golpe o un repuesto. Verificamos sisum(x[1:2])
es mayor o igual que 10. Si es un strike, obviamente este es el caso. Si es un repuesto, entonces esto también funciona. Entonces, si esto es VERDADERO, agregamosx[3]
a la suma. Esto luego se agrega as
.fuente
CoffeeScript (
234215170)EDITAR : una fuerte reescritura, plagando descaradamente el gran enfoque basado en la pila de Howard. Estoy seguro de que se puede eliminar más para acceder al último elemento de una matriz sin destruirlo ...
fuente
Rubí, 252 bytes
Acepta la entrada en una matriz, agrega todos los elementos primero, luego busca la bonificación de repuesto y huelga
fuente
PHP, 82 bytes
toma datos de los argumentos de la línea de comandos; ejecutarlo
-nr
o probarlo en línea .Descompostura
fuente
Perl 5 , 65 + 2 = 67 bytes
Requiere
-ap
banderasPruébalo en línea!
fuente
Gelatina ,
3635 bytesUn enlace monádico que acepta una lista de enteros y devuelve un entero.
Pruébalo en línea!
¿Cómo?
Calcula el puntaje de cada carrera superpuesta de tres cuencos como si fuera uno que comenzó al comienzo de un cuadro y, opcionalmente, agrega un identificador de huelga (
-1
), aplana esta lista resultante, la divide en los identificadores de huelga, luego descarta cada segundo resultado de cada fragmento (eliminando los puntajes de esas carreras que realmente no comenzaron con el inicio de un fotograma).Para atender el cuadro final, primero se agrega un cero a la entrada (para permitir el corte en tres partes para permitir que un cuadro comience en lo que fue el penúltimo tazón) y las puntuaciones resultantes se truncan a los primeros diez (para eliminar el ahora posible 11o cuadro falso) antes de resumirlos.
fuente
Perl, 140?
Primer intento:
Lamentablemente, hay ciertos casos en los que falla. Vendré y lo rehaceré más tarde.
fuente