Le défi
Étant donné une planche de bagatelle comme celle ci-dessous:
| |
| /\ / |
| \ /|
| \ \ /\ \ |
| \ / \ |
|\ / / \ |
| \ / \ |
| \ |
| \ / \ /\ \ |
|\ / / \ /|
| / |
| /\ / / |
| / |
|\ / / / |
| |
----------------------
votre tâche consiste à transformer une liste de «lancers» en score.
La planche aura toujours 20 caractères (plus 2 bords) de large, mais de hauteur variable. Chaque «lancer» est un nombre représentant l'endroit où le ballon tombe dans le plateau, commençant à 0 pour l'extrême gauche jusqu'à 19 pour l'extrême droite. Chaque balle tombera directement à moins qu'elle ne rencontre a /
ou a \
. La rencontre avec a /
déplace la balle d'une colonne vers la gauche et a \
déplace la balle d'une colonne vers la droite. Après avoir été déplacé, le ballon continue tout droit comme auparavant. Le score d'un lancer dépend de l'endroit où le ballon touche le bas du plateau.
Les scores pour chaque position finale sont les suivants:
| |
----------------------
01234567899876543210
et sont les mêmes pour toutes les planches. Les première et dernière lignes seront toujours vides. La balle est garantie pour atteindre le fond , peu importe où il est passé de, donc il n'y aura pas de conseils où il peut se piégés par \/
, \|
ou des |/
combinaisons.
Contribution
L'entrée se fera sur STDIN et consistera en un tableau suivi d'une ligne vierge suivie d'une liste de nombres séparés par des espaces représentant les lancers.
Production
Ouput devrait être le score total pour le jeu donné.
Quelques exemples
Contribution
| |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| |
| |
----------------------
1 4 2 19 0 2 4 3 17 13 16
Production
9
Contribution
| |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
----------------------
15 10 3 8 18 19 0 6 7 10
Production
72
Contribution
| |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| |
----------------------
1 4 18 17 14 2 0 19 15
Production
18
Scripts de test
J'ai utilisé des scripts de test écrits par Joey et Ventero (j'espère que cela ne les dérange pas ...) pour créer des tests pour cette tâche: -
Usage: ./test [your program and its arguments]
C'est codegolf - la solution la plus courte l'emporte.
Réponses:
GolfScript,
6059 caractèresJ'étais tellement tenté d'écrire une solution qui fonctionne en redéfinissant les symboles
/
,\
etspace
, mais c'est en fait assez cher (surtout une fois que vous ne pouvez plus utiliser l'original\
).31%4%(
est entaillé de la solution de Keith Randall et des cartes les codes ASCII pourspace
,/
et\
à0
,-1
,1
respectivement. (Voir l'historique des modifications).la source
./test ruby golfscript.rb peter.gs
? Je lui ai lancé des tests en tant qu'entrée canalisée../test-bagatelle.sh `which golfscript.rb` bagatelle2.gs
Python 2,
147 132130 caractèresla source
s+=min(p,19-p)
- être ?for r in l[:-3]:p-=" /".find(r[p])
devrait sauver quelques caractères19-p+1 == 20-p
Python,
165159 caractèresIl commence par une rangée de scores et fonctionne de bas en haut, calculant ce que seraient les scores des balles commençant à chaque rangée.
la source
list(sys.stdin)
au lieu dereadlines()
Ruby,
123117115107999897la source
i-='\ /'...
place pour enregistrer un autre caractère