Muchas personas han ido a su centro de boliche local para jugar algunos juegos de bolos, y muchas personas continúan luchando para calcular sus puntajes. World Bowling ha introducido un sistema de puntuación simplificado para atraer a más personas al deporte. Este sistema de puntuación se utiliza en juegos internacionales.
El sistema de puntuación funciona así (de Wikipedia ):
El sistema de puntuación World Bowling, descrito como "puntuación de cuadro actual" [32], otorga los pines de la siguiente manera:
- Huelga: 30 (independientemente de los resultados de las tiradas posteriores)
- repuesto: más de 10 pinfall en el primer rollo del cuadro actual
- abierto: pinfall total para el marco actual
Si no está familiarizado con los bolos, aquí hay un resumen.
Hay 10 pines al final de una pista de bolos donde el objetivo es derribarlos a todos con una bola de boliche. Obtienes 2 lanzamientos de una bola para intentar derribarlos a todos, preferiblemente derribándolos a todos con el primer lanzamiento (conocido como strike ). Si recibe un golpe, entonces ese marco se completa y no necesita rodar la pelota por segunda vez. Una huelga vale 30.
Si no derribas los diez, obtienes un rollo más. Si derriba todos los pines restantes, eso se conoce como repuesto . El puntaje vale 10 pines + el número de pines derribados en el primer lanzamiento. Por ejemplo, si derribo 7 pines y luego logro derribar los 3 restantes, eso valdría 17.
Si después de su segundo lanzamiento no logra derribar los diez, eso se conoce como un marco abierto . La puntuación vale el número total de pines derribados para ese marco.
Hay 10 cuadros en un juego . Si estás familiarizado con la puntuación tradicional de bolos, no obtienes una tirada extra en el décimo cuadro con la Puntuación Mundial de Bolos. En la puntuación de bolos tradicional, se necesitan 12 golpes consecutivos para obtener una puntuación perfecta de 300, mientras que la puntuación de Bowling Mundial solo requiere 10 golpes consecutivos.
Reto
Su desafío es calcular el puntaje dado los valores de una hoja de puntaje.
En una hoja de puntaje, un error se indica con un guión ( - ), un golpe con una X y un repuesto con una barra ( / ). Si no se aplican, el recuento de pinfall simplemente se indica con un número (1-9). Las faltas y las divisiones también se registran en las hojas de puntuación, pero no necesita preocuparse por ellas.
Entrada
Se le dará una cadena que consta de puntajes para cada cuadro, y tendrá un total de diez cuadros. Cada cuadro tendrá hasta dos valores, o tan solo 1 valor si hubo una huelga. Su entrada puede ser un parámetro de cadena para una función, leer desde un archivo o desde STDIN.
Por ejemplo, si derribo 1 pin en mi primer rollo, luego derribo 2, el marco se vería como "12". Esto no significa 12 (doce), sino que significa 1 y 2, para un total de 3.
Si me perdiera cada pin con ambos rollos (bolas de canaleta), se vería así "-" (puntaje de 0).
Cada cuadro estará separado por un espacio.
Entrada de muestra
-- 9- -9 X -/ 8/ 71 15 44 X
Para desglosar este ejemplo,
- Cuadro 1 (-) - fallan ambos rollos. anotó 0
- Cuadro 2 (9-): derribó 9 en el primer lanzamiento, falló en el segundo lanzamiento. Puntuación 9
- Cuadro 3 (-9): se perdió todo en el primero, obtuvo 9 en el segundo. Puntuación 9
- Cuadro 4 (X) - Golpe, derribado los diez. Puntuación 30
- Cuadro 5 (- /) - Repuesto, se perdió todo en el primero, derribó a todos con el segundo lanzamiento. Puntuación 10 + 0 = 10
- Marco 6 (8 /) - Repuesto, 8 pines en el primer rollo, derribó a los otros 2 con el segundo rollo. Puntuación 10 + 8 = 18
- Marco 7 (71): marco abierto, 7 pines en el primer rollo, 1 pin en el segundo rollo. Puntuación 7 + 1 = 8
- Los cuadros 8, 9, 10 siguen los mismos ejemplos que anteriormente.
Salida
La salida será simplemente un valor que tenga la suma de las puntuaciones de los 10 fotogramas. Usando la entrada de muestra, la salida será 128. Su salida puede ser una cadena o un tipo numérico. Puede ser un valor de retorno de función, o escrito en STDOUT.
Reglas
- Suponga que la entrada siempre será válida. Por ejemplo, un marco inválido sería "/ 8", "XX", "123", "0", etc.
- No necesita preocuparse por divisiones o faltas.
- Su código puede ser un programa completo o una función que toma una cadena y devuelve el puntaje.
- Su código no debe arrojar ninguna excepción.
- Este es el código de golf, la respuesta con el menor número de bytes gana.
- Los idiomas que usan incluye o importa deben incluir las declaraciones de importación como parte de su código y contar para el recuento de bytes.
Casos de prueba
"-- 9- -9 X -/ 8/ 71 15 44 X" -> 128
"-- -1 2- 12 22 5- 42 61 8- 72" -> 45
"X X X 1/ 2/ 3/ 4/ 5/ -- 9/" -> 174
"X X X X X X X X X X" -> 300
"-- -- -- -- -- -- -- -- -- --" -> 0
Respuestas:
05AB1E ,
1211 bytesCódigo
Pruébalo en línea!
Explicación
fuente
JavaScript, 43 bytes
Mostrar fragmento de código
Cómo funciona
Convertimos cada personaje a su punto:
Luego suma todos los puntos.
Convertir
El operador OR a nivel de bit
|
convierte su operando a Int32 antes de operar. Al convertir a Int32, el valor primero se convierte al formato de Número (número flotante de 64 bits), luego se conecta a Int32 (o se convierte a 0 si no es válido).ToInt32({'/':10,X:30}[c])
podría leerse como:ToInt32(undefined)
->ToInt32(NaN)
-> 0;ToInt32(c)
podría ser:Number(c)
es 0, el resultado es 0;Number(c)
esNaN
, el resultado es 0;Suma
[c,...s] = s
dejarc = s[0]
ys = s.slice(1)
;fuente
Stax , 13 bytes
Ejecutar y depurarlo
Desempaquetado, sin golf, y comentó que es así.
Ejecute este
fuente
Python 2 , 55 bytes
Pruébalo en línea!
Basado en el enfoque de índice de cadena de muchas soluciones.
fuente
Java 8,
645946 bytes-5 bytes gracias a @Neil .
-13 bytes gracias a @ OlivierGrégoire .
Explicación:
Pruébalo en línea.
fuente
("123456789//"+1e6+1e6+"X")
parece ahorrar 5 bytes.F #,
106103bytesPruébalo en línea!
Creo que este rompecabezas (sin el golf) sería una gran pregunta para una guía de "Programación funcional para principiantes". ¡Y debería saberlo!
-3 de Kevin Cruijssen, por detectar que el espacio en blanco entre 'y "entonces" se puede eliminar. ¡Gracias!
La solución Stax de recursive de usar índices de cadena es muy, muy buena. Si lo transfiere a F #, puede obtenerlo por 77 bytes :
¡Prueba esto en línea!
fuente
'
de -3 bytes.Jalea , 17 bytes
Un enlace monádico que acepta una lista de caracteres y devuelve un entero
Pruébalo en línea!
¿Cómo?
También a los 17:
Trata eso
fuente
Perl 6 , 30 bytes
Pruébalo en línea!
fuente
Retina , 17 bytes
Pruébalo en línea!
No estoy muy actualizado sobre los últimos cambios de Retina. Los buscaré más cuando tenga la oportunidad y veré si hay nuevos trucos para jugar golf. El código convierte todos los golpes en tres repuestos, todos los repuestos en diez puntos, luego todos los puntos en el número correspondiente de guiones bajos. Luego cuenta el número de guiones bajos.
fuente
Perl 5
-pF
,3027 bytes-3 bytes gracias a Xcali
Pruébalo en línea!
fuente
/X/
lugar dey/X//
y uno más usando enm%/%
lugar dey%/%%
: ¡ Pruébelo en línea!y///
cuando los hice fuera de un circuito. Gracias05AB1E , 14 bytes
Pruébalo en línea!
Explicación
fuente
J , 33 bytes
Pruébalo en línea!
Explicación:
]
la entrada('-123456789',20 1#'/X')
agrega 20/
y unoX
a la cadena-123456789
i.
encuentra los índices de la entrada en la cadena anterior31|
módulo 31 - para deshacerse de los espacios - no se encuentran en la cadena, entoncesi.
devuelve 31 para ellos1#.
encuentra la suma de los índicesfuente
Python 2 , 67 bytes
-3 bytes gracias a @KevinCruijssen
Pruébalo en línea!
fuente
'-123456789'+'/'*20+'X':sum(p.index(i)
a'-123456789/'+'X'*20:sum(p.rfind(i)
Jalea , 12 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python 3.6 , 54 bytes
Pruébalo en línea!
fuente
Kotlin , 50 bytes
Pruébalo en línea!
Espero que no esté en contra de las reglas responder tu propia pregunta, pero quería unirme a la diversión.
Math.E
produce el valor2.718281828459045
. Lo estoy usando para crear una cadena de relleno para empujar X a la posición 30.indexOf
obtiene la posición (basada en 0) del personaje en la cadena "12345 ...". Si no se encuentra, devuelve -1. Agregamos 1 para hacer estos 0, y eso también hace que la posición basada en 0 sea el valor de la cadena.fuente
PHP,
119109bytes-10 bytes gracias a @KevinCruijssen
Pruébalo en línea!
fuente
($b=='/'?10+(int)$a:((int)$a+(int)$b))
a(int)$a+($b=='/'?10:(int)$b)
-10 bytes.Carbón , 23 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
Rojo , 93 bytes
Pruébalo en línea!
fuente
C # (.NET Core) , 40 + 18 = 58 bytes
Pruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 53 bytes
Pruébalo en línea!
fuente
SNOBOL4 (CSNOBOL4) ,
169151147 bytesPruébalo en línea!
fuente
Clojure , 70 bytes
Pruébalo en línea!
Al
reduce
pasar sobre una Cadena, cada personaje se convierte en un personaje, ¿quién lo hubiera pensado? Pero esto es malo, tengo que escribir\space
y eso duele más de lo que uno puede imaginar. Además, al crear un número real a partir de un carácter, la combinación debigint
ystr
parece ser la única combinación utilizable.Bueno, aparte de todas estas luchas: función anónima que devuelve el puntaje como algo natural.
fuente
Rubí , 38 bytes.
Pruébalo en línea!
fuente