Bestimmen Sie anhand einer Zeichenfolge, in der die erste Zeile Leerzeichen und einen Punkt ( .
den "Ball") enthält, gefolgt von Zeilen mit Leerzeichen, Schrägstrichen ( /
) und umgekehrten Schrägstrichen ( \
), in welcher Spalte der Ball landet, nachdem er von seiner Startposition gefallen ist . Jeder /
verschiebt es um 1 Spalte nach links und jeder \
verschiebt es um 1 Spalte nach rechts.
Probeneingabe
.
/ \ \
/ /
\ \/ \
\ /\
\ /\ \
\ /
Beispielausgabe
Der Ball beginnt in Spalte 5, trifft die /
Zeile 3 und dann die drei \
Zeilen 5 bis 7 für eine Endposition von:
7
Beachten Sie, dass Spalten 1-indiziert sind, hauptsächlich aus Gründen der Konsistenz mit Texteditor-Konventionen.
Edge-Fälle
Wenn der Ball /
in der ersten Spalte ein trifft , bleibt er für immer in der nicht vorhandenen Spalte 0 stecken. Ihr Programm sollte dies durch Drucken korrekt handhaben 0
.
Wenn der Ball eine Seite eines \/
Musters berührt, ist das Ergebnis undefiniert. Es ist Ihrem Programm gestattet, ohne Ausgabe zu beenden, eine Endlosschleife auszuführen oder eine Fehlermeldung auszudrucken (meine Lösung druckt -1
), es darf jedoch nichts drucken, was als gültige Ausgabe angesehen werden kann.
Wenn der Ball in einem \\
Muster auf den linken Schrägstrich trifft , sollte er direkt unter dem rechten Schrägstrich und nicht rechts davon enden. Die Lösung, die ich mir ursprünglich vorgestellt hatte, war anfällig dafür, dies falsch zu verstehen. Gehen Sie diesen Weg also nicht!
Nach dem .
oder dem letzten /
oder \
in jeder Zeile können Leerzeichen stehen oder nicht . Ihr Programm sollte sich nicht darauf verlassen, dass eine solche Auffüllung verfügbar ist. Ähnlich kann es sein, dass auf die erste Zeile irgendwelche Zeilen folgen oder nicht.
Sie können davon ausgehen, dass die erste Zeile null oder mehr Leerzeichen und genau eins enthält .
. Eventuell nachfolgende Zeilen enthalten keine oder mehr Leerzeichen und keine oder mehr Schrägstriche.
Implementierungsdetails
Ihr Programm kann nach Belieben aus einer Datei (als Befehlszeilenargument angegeben) oder von der Standardeingabe lesen.
Ihr Programm muss eine einzelne Zahl für die Standardausgabe ausgeben. (Ja, eine nachgestellte Zeile ist in Ordnung. Ja, die Nummer kann mehr als eine Ziffer haben.)
Testfälle
Eingang:
.
Ausgabe:
1
Beachten Sie, dass die Eingabe hier genau ein Byte beträgt. Dies ist der kleinste Fall, den Sie handhaben sollten.
Eingang:
. \ \ \ \
Ausgabe:
6
Beachten Sie, dass nach diesen Schrägstrichen keine Leerzeichen stehen.
Eingang:
. / /\\ / \ //\ \/// // \\/ \/\ /\/
Ausgabe:
0
Eingang:
. / / / \\\ /\\ / \
Ausgabe:
1
Eingang:
. \ / / \
Ausgabe:
4
Eingang:
. \ \/\/\/
Ausgabe:
(anything but a nonnegative number)
Schlußbemerkungen
Diese Frage ähnelt der Simulation eines (schwerkraftbasierten) Billardkugel-Computers , ist jedoch wesentlich einfacher, sodass hoffentlich mehr Interesse aufkommt.
Ich habe eine 169-Zeichen-Lösung in Python. Ich bin sicher, dass die talentierten Golfer hier diese Platte in Stücke reißen können. : ^)
Dies ist Code-Golf , daher wird die kürzeste Antwort in Zeichen am Ende des Monats akzeptiert!