Die Herausforderung
Bei einem Bagatelle-Brett wie dem folgenden:
| |
| /\ / |
| \ /|
| \ \ /\ \ |
| \ / \ |
|\ / / \ |
| \ / \ |
| \ |
| \ / \ /\ \ |
|\ / / \ /|
| / |
| /\ / / |
| / |
|\ / / / |
| |
----------------------
Ihre Aufgabe ist es, eine Liste von "Würfen" in eine Partitur zu verwandeln.
Die Tafel wird immer 20 Zeichen (plus 2 Kanten) breit sein, aber von variabler Höhe. Jeder 'Wurf' ist eine Zahl, die angibt, wo der Ball ins Spielfeld fällt, beginnend bei 0 (ganz links) bis 19 (ganz rechts). Jeder Ball fällt gerade nach unten, es sei denn, er trifft auf a /
oder a \
. Wenn Sie auf a /
treffen, wird der Ball um eine Spalte nach links und \
der Ball um eine Spalte nach rechts verschoben. Nach dem Verschieben geht der Ball weiter wie zuvor. Die Punktzahl für einen Wurf hängt davon ab, wo der Ball den unteren Rand des Bretts berührt.
Die Punktzahlen für jede Endposition sind wie folgt:
| |
----------------------
01234567899876543210
und sind für alle Boards gleich. Die erste und die letzte Zeile sind immer leer. Es ist garantiert, dass der Ball den Boden erreicht, unabhängig davon, von wo er fallen gelassen wird. Es gibt also keine Bretter, an denen er gefangen werden kann \/
, \|
oder |/
Kombinationen.
Eingang
Die Eingabe erfolgt auf STDIN und besteht aus der Tafel, gefolgt von einer Leerzeile, gefolgt von einer durch Leerzeichen getrennten Liste von Zahlen, die die Würfe darstellen.
Ausgabe
Ausgabe sollte die Gesamtpunktzahl für das gegebene Spiel sein.
Ein paar Beispiele
Eingang
| |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| |
| |
----------------------
1 4 2 19 0 2 4 3 17 13 16
Ausgabe
9
Eingang
| |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
----------------------
15 10 3 8 18 19 0 6 7 10
Ausgabe
72
Eingang
| |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| |
----------------------
1 4 18 17 14 2 0 19 15
Ausgabe
18
Testskripte
Ich habe einige Testskripte von Joey und Ventero verwendet (ich hoffe, es macht ihnen nichts aus ...), um einige Tests für diese Aufgabe zu erstellen:
Verwendung: ./test [your program and its arguments]
Das ist Codegolf - kürzeste Lösung gewinnt.
Antworten:
GolfScript,
6059 ZeichenIch war so versucht , eine Lösung zu schreiben , das durch eine Neudefinition der Symbole funktioniert
/
,\
undspace
, aber es ist eigentlich ziemlich teuer (vor allem , wenn Sie nicht mehr das Original verwenden können\
).31%4%(
von Keith Randall Lösung eingekerbt und bildet den ASCII - Codes fürspace
,/
und\
zu0
,-1
,1
jeweils. (Siehe Verlauf bearbeiten).quelle
./test ruby golfscript.rb peter.gs
? Ich habe stattdessen einige Tests als Pipe-Eingang durchgeführt../test-bagatelle.sh `which golfscript.rb` bagatelle2.gs
Python 2,
147 132130 Zeichenquelle
s+=min(p,19-p)
?for r in l[:-3]:p-=" /".find(r[p])
sollte ein paar Zeichen sparen19-p+1 == 20-p
Python,
165159 ZeichenEs beginnt mit einer Reihe von Punkten und arbeitet sich von unten nach oben vor. Dabei wird berechnet, was die Punkte für Bälle sind, die in jeder Reihe beginnen.
quelle
list(sys.stdin)
anstelle vonreadlines()
Ruby,
123117115107999897quelle
i-='\ /'...
stattdessen ein weiteres