Votre tâche consiste à résumer et à générer le score d'un joueur dans une partie de bowling à 10 quilles après 21 lancers maximum .
Les rouleaux sont représentés comme une séquence d'entiers dans votre méthode de saisie préférée . Chaque entier correspond au nombre de broches qui ont été renversées dans ce rouleau.
Notation
Après chaque tour, le nombre de quilles renversées dans ce tour est compté dans le score final. Si un joueur renverse les dix quilles dans le premier jet d'un tour, c'est une grève et le tour est terminé. Sinon, la manche dure encore un jet. Si le deuxième rouleau d'un tour abat toutes les broches restantes, c'est une pièce de rechange .
Pour chaque coup, il y a un bonus égal à la somme des quilles renversées dans les deux rouleaux suivants. Pour chaque pièce de rechange, il y a un bonus égal au nombre de quilles renversées au prochain lancer.
Au 10e et dernier tour, le joueur peut obtenir des rouleaux supplémentaires: En cas de grève, le joueur obtient deux rouleaux supplémentaires pour compenser son bonus de grève. En cas de réserve, le joueur obtient un jet de plus.
Exemples
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
Règles
- Vous pouvez supposer que l'entrée est valide.
- Selon le commentaire de Mego, j'ai assoupli les exigences relatives aux méthodes d'entrée / sortie pour répondre à notre norme actuelle .
- Les réponses dans des langues plus récentes que le défi sont autorisées
- Le code le plus court gagne!
space separated integers
?Réponses:
GolfScript,
5041 caractèresUne autre tentative dans GolfScript ( exécutez-le en ligne ).
Une explication du code suit. La solution utilise la nature de pile du problème (consommer des rouleaux les uns après les autres) mais par conséquent, l'entrée doit être inversée.
La version précédente:
la source
Python,
116110105 10510310099 caractèresDépenser 30 caractères en entrée est gênant. Suggestions bienvenues.
Un grand merci à Howard pour les améliorations.
la source
1+(z[i]!=10)
par2-(z[i]>9)
pour enregistrer un caractère.i
complètement (réglé sur 0) et au lieu d'i+=...
utiliserz=z[2-(z[0]>9)::];
z=input()
devrait aller (en prenant effectivement une représentation sous forme de chaîne d'une liste deint
s et en l'eval
utilisant). Cependant, les programmes complets devraient sortir quelque part (je pense que c'était aussi le cas à l'époque). En tant que tel, je pense que cela peut être changé pour ce programme de 78 octetsR, 101 octets
Je ne sais pas pourquoi ce défi a été heurté, mais j'aime ça, donc je vais quand même répondre tard.
Essayez-le en ligne!
Non golfé:
Fonction récursive. Prend
x
en entrée, qui détient les scores. Initialise less
noyaux etc
calcule le nombre de tours lancés.L'instruction if vérifie si 10 tours sont lancés ou si
x
est vide. Si tel est le cas, le score est retourné. Sinon, la fonction s'appellera comme suit:Il supprime les lancers
x
, en vérifiant s'il s'agit d'une frappe ou non. Si c'est le cas, la première entrée est supprimée, sinon les deux premières.(S=x[1]!=10)
vérifie les grèves. Nous supprimons l'-
index ( )0:S
, oùS
est 1 s'il s'agit d'une grève, et 0 sinon. Et puis on ajoute un:-(0:(x[1]!=10)+1)
. Nous passons le raccourcix
à l'appel suivant.Quant au score, on le retrouve en prenant
x[1:2]
s'il s'agit d'un tour régulier, etx[1:3]
s'il s'agit d'une frappe ou d'un jeu de rechange. Nous vérifions si ellesum(x[1:2])
est supérieure ou égale à 10. S'il s'agit d'une grève, c'est évidemment le cas. S'il s'agit d'une pièce de rechange, cela fonctionne également. Donc, si c'est VRAI, nous ajoutonsx[3]
à la somme. Ceci est ensuite ajouté às
.la source
CoffeeScript (
234215170)EDIT : Une réécriture lourde, plagiant sans vergogne la grande approche basée sur la pile de Howard. Je suis convaincu que plus peut être supprimé pour accéder au dernier élément d'un tableau sans le détruire ...
la source
Rubis, 252 octets
Accepte les entrées dans un tableau, ajoutez d'abord tous les éléments, puis recherchez le bonus de rechange et de frappe
la source
PHP, 82 octets
prend l'entrée des arguments de la ligne de commande; courir avec
-nr
ou testez-le en ligne .panne
la source
Perl 5 , 65 + 2 = 67 octets
Nécessite des
-ap
drapeauxEssayez-le en ligne!
la source
Gelée ,
3635 octetsUn lien monadique acceptant une liste d'entiers et renvoyant un entier.
Essayez-le en ligne!
Comment?
Calcule le score de chaque série de trois bols qui se chevauchent comme s'il s'agissait d'une séquence commençant au début d'une image et ajoute éventuellement un identifiant de frappe (
-1
), aplatit cette liste résultante, la fractionne aux identifiants de frappe, puis supprime chaque deuxième résultat de chaque morceau (en supprimant les scores de ces courses qui n'ont pas vraiment commencé avec le début d'une image).Pour répondre à l'image finale, un zéro est d'abord ajouté à l'entrée (pour permettre le découpage en 3 pour permettre à une image de commencer sur ce qui était l'avant-dernier bol) et les scores résultants sont tronqués aux dix premiers (pour supprimer le maintenant possible faux 11e cadre) avant de les résumer.
la source
Perl, 140?
Premier essai:
Malheureusement, il y a certains cas où cela échoue. Je reviendrai le refaire plus tard.
la source