Beaucoup de gens sont allés à leur centre de bowling local pour jouer quelques parties de bowling, et beaucoup de gens continuent à avoir du mal à calculer leurs scores. Le World Bowling a introduit un système de notation simplifié afin d'attirer plus de gens dans ce sport. Ce système de notation est utilisé dans les jeux internationaux.
Le système de notation fonctionne comme ceci (de Wikipedia ):
Le système de notation du World Bowling - décrit comme la "notation de la trame actuelle" [32] - garantit les broches comme suit:
- grève: 30 (indépendamment des résultats des rôles suivants)
- de rechange: 10 plus de chutes au premier rouleau du cadre actuel
- ouvert: chute totale pour l'image actuelle
Si vous n'êtes pas familier avec le bowling à dix quilles, voici un récapitulatif.
Il y a 10 quilles à la fin d'une piste de bowling où le but est de les abattre toutes avec une boule de bowling. Vous obtenez 2 rouleaux d'une balle pour tenter de les faire tomber, de préférence en les renversant tous avec le premier lancer (connu sous le nom de frappe ). Si vous obtenez un coup, ce cadre est terminé et vous n'avez pas besoin de faire rouler la balle une deuxième fois. Une grève vaut 30.
Si vous ne renversez pas les dix, vous obtenez un autre jet. Si vous abattez toutes les broches restantes, cela s'appelle une pièce de rechange . Le score vaut 10 quilles + le nombre de quilles renversées au premier lancer. Par exemple, si j'ai abattu 7 broches, puis réussi à abattre les 3 restantes, cela vaudrait 17.
Si après votre deuxième lancer, vous ne parvenez pas à abattre les dix, cela s'appelle un cadre ouvert . Le score vaut le nombre total de broches renversées pour cette image.
Il y a 10 images dans un jeu . Si vous êtes familier avec le score de bowling traditionnel, vous n'obtenez pas de jet supplémentaire dans le 10ème cadre avec le World Bowling Scoring. Dans le classement traditionnel des quilles, il faut 12 frappes consécutives pour obtenir un score parfait de 300, tandis que la notation du World Bowling ne nécessite que 10 frappes consécutives.
Défi
Votre défi consiste à calculer le score donné à partir d'une feuille de score.
Sur une feuille de match, un échec est indiqué par un tiret ( - ), une frappe avec un X et un remplaçant avec une barre oblique ( / ). Si ceux-ci ne s'appliquent pas, le nombre de chutes est simplement indiqué par un nombre (1-9). Les fautes et les écarts sont également enregistrés sur les feuilles de score, mais vous n'avez pas à vous en préoccuper.
Contribution
Vous recevrez une chaîne composée de scores pour chaque image, et vous aurez un total de dix images. Chaque trame aura jusqu'à deux valeurs, ou aussi peu qu'une valeur s'il y a eu une grève. Votre entrée peut être un paramètre de chaîne d'une fonction, lu à partir d'un fichier ou de STDIN.
Par exemple, si j'ai abattu 1 broche sur mon premier rouleau, puis abattu 2, le cadre ressemblerait à "12". Cela ne signifie pas 12 (douze), mais signifie 1 et 2, pour un total de 3.
Si je manquais chaque épingle avec les deux rouleaux (boules de gouttière), cela ressemblerait à ceci "-" (score de 0).
Chaque cadre sera séparé par un espace.
Exemple d'entrée
-- 9- -9 X -/ 8/ 71 15 44 X
Pour décomposer cet exemple,
- Image 1 (-) - les deux rouleaux manqués. marqué 0
- Image 2 (9-) - renversé 9 sur le premier rouleau, raté sur le deuxième rouleau. Score 9
- Frame 3 (-9) - Tout manqué sur le premier, obtenu 9 sur le second. Score 9
- Frame 4 (X) - Strike, renversé tous les dix. Score 30
- Frame 5 (- /) - Spare, a tout raté le premier, a tout renversé avec le 2e lancer. Score 10 + 0 = 10
- Cadre 6 (8 /) - Rechange, 8 broches sur le premier rouleau, renversé les 2 autres avec le deuxième rouleau. Score 10 + 8 = 18
- Cadre 7 (71) - cadre ouvert, 7 broches sur le premier rouleau, 1 broche sur le deuxième rouleau. Score 7 + 1 = 8
- Les cadres 8, 9, 10 suivent les mêmes exemples que ci-dessus.
Production
La sortie sera simplement une valeur qui a la somme des scores des 10 images. En utilisant l'exemple d'entrée, la sortie sera 128. Votre sortie peut être une chaîne ou un type numérique. Il peut s'agir d'une valeur de retour de fonction ou écrite dans STDOUT.
Règles
- Supposons que l'entrée sera toujours valide. Par exemple, une trame non valide serait "/ 8", "XX", "123", "0", etc.
- Vous n'avez pas à vous soucier des écarts ou des fautes.
- Votre code peut être un programme complet ou une fonction qui prend une chaîne et renvoie le score.
- Votre code ne doit lever aucune exception.
- C'est le golf de code, la réponse avec le moins de victoires d'octets.
- Les langues qui utilisent des inclusions ou des importations doivent inclure les instructions d'importation dans leur code et compter dans le nombre d'octets.
Cas de test
"-- 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
Réponses:
05AB1E ,
1211 octetsCode
Essayez-le en ligne!
Explication
la source
JavaScript, 43 octets
Afficher l'extrait de code
Comment ça marche
Nous convertissons chaque personnage en son point:
Additionnez ensuite tous les points.
Convertir
L' opérateur OR au niveau du bit
|
convertit son opérande en Int32 avant d'opérer. Lors de la conversion en Int32, la valeur est d'abord convertie au format Number (64bit float number), puis jonction en Int32 (ou convertie en 0 si non valide).ToInt32({'/':10,X:30}[c])
pourrait se lire comme suit:ToInt32(undefined)
->ToInt32(NaN)
-> 0;ToInt32(c)
pourrait être:Number(c)
est 0, le résultat est 0;Number(c)
estNaN
, le résultat est 0;Somme
[c,...s] = s
laissezc = s[0]
, ets = s.slice(1)
;la source
Stax , 13 octets
Exécuter et déboguer
Déballé, non golfé et commenté c'est ainsi.
Exécutez celui-ci
la source
Python 2 , 55 octets
Essayez-le en ligne!
Basé sur l'approche d'index de chaîne de nombreuses solutions.
la source
Java 8,
645946 octets-5 octets grâce à @Neil .
-13 octets grâce à @ OlivierGrégoire .
Explication:
Essayez-le en ligne.
la source
("123456789//"+1e6+1e6+"X")
semble économiser 5 octets.F #,
106103 octetsEssayez-le en ligne!
Je pense que ce puzzle (sans le golf) serait une excellente question pour un guide "Programmation fonctionnelle pour débutants". Et je devrais savoir!
-3 de Kevin Cruijssen, pour avoir remarqué que les espaces entre 'et "puis" peuvent être supprimés. Merci!
La solution Stax de recursive qui utilise des index de chaîne est très très bonne. Si vous le portez sur F #, vous pouvez l'obtenir pour 77 octets :
Essayez ceci en ligne!
la source
'
-3 octets.Gelée , 17 octets
Un lien monadique acceptant une liste de caractères et renvoyant un entier
Essayez-le en ligne!
Comment?
Également à 17 ans:
Essayez ça
la source
Perl 6 , 30 octets
Essayez-le en ligne!
la source
Rétine , 17 octets
Essayez-le en ligne!
Je ne suis pas tout à fait au courant des derniers changements de Retina. Je vais m'intéresser davantage à eux lorsque j'en aurai l'occasion et voir s'il y a de nouvelles astuces pour jouer au golf. Le code transforme toutes les frappes en trois pièces de rechange, toutes les pièces de rechange en dix points, puis tous les points pour le nombre correspondant de soulignements. Ensuite, il compte le nombre de soulignements.
la source
Perl 5
-pF
,3027 octets-3 octets grâce à Xcali
Essayez-le en ligne!
la source
/X/
au lieu dey/X//
et un de plus en utilisant à lam%/%
place dey%/%%
: Essayez-le en ligne!y///
partir de quand je les ai fait en dehors d'une boucle. Merci05AB1E , 14 octets
Essayez-le en ligne!
Explication
la source
J , 33 octets
Essayez-le en ligne!
Explication:
]
l'entrée('-123456789',20 1#'/X')
ajoute 20/
et unX
à la chaîne-123456789
i.
trouve les indices de l'entrée dans la chaîne ci-dessus31|
modulo 31 - pour se débarrasser des espaces - ils ne sont pas trouvés dans la chaîne, donci.
retourne 31 pour eux1#.
trouve la somme des indicesla source
Python 2 , 67 octets
-3 octets grâce à @KevinCruijssen
Essayez-le en ligne!
la source
'-123456789'+'/'*20+'X':sum(p.index(i)
à'-123456789/'+'X'*20:sum(p.rfind(i)
Gelée , 12 octets
Essayez-le en ligne!
Comment ça marche
la source
Python 3.6 , 54 octets
Essayez-le en ligne!
la source
Kotlin , 50 octets
Essayez-le en ligne!
J'espère que ce n'est pas contre les règles de répondre à votre propre question, mais je voulais participer au plaisir.
Math.E
produit la valeur2.718281828459045
. Je l'utilise pour créer une chaîne de remplissage pour pousser X en position 30.indexOf
obtient la position (basée sur 0) du caractère dans la chaîne "12345 ...". S'il n'est pas trouvé, il renvoie -1. Nous ajoutons 1 pour faire ces 0, et cela fait également de la position basée sur 0 la valeur de la chaîne.la source
PHP,
119109 octets-10 octets grâce à @KevinCruijssen
Essayez-le en ligne!
la source
($b=='/'?10+(int)$a:((int)$a+(int)$b))
à(int)$a+($b=='/'?10:(int)$b)
-10 octets.Fusain , 23 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
Rouge , 93 octets
Essayez-le en ligne!
la source
C # (.NET Core) , 40 + 18 = 58 octets
Essayez-le en ligne!
la source
C # (Visual C # Interactive Compiler) , 53 octets
Essayez-le en ligne!
la source
SNOBOL4 (CSNOBOL4) ,
169151147 octetsEssayez-le en ligne!
la source
Clojure , 70 octets
Essayez-le en ligne!
Lorsque vous
reduce
utilisez une chaîne, chaque caractère est en fait converti en un caractère - qui aurait pensé. Mais ce méchant, je dois écrire\space
et cela fait plus de mal que l'on puisse imaginer. De plus, lors de la création d'un nombre réel à partir d'un caractère, la combinaison debigint
etstr
semble être la seule combinaison utilisable.Eh bien, en dehors de toutes ces luttes: fonction anonyme qui renvoie le score comme un naturel.
la source
Rubis , 38 octets
Essayez-le en ligne!
la source