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!
quelle
Antworten:
Python, 143B
Verwenden des Tricks zum Einrücken von Leerzeichen / Tabulatoren. Ich habe hier nichts besonders Schlaues gemacht.
F
ist der aktuelle Index,l
ist die aktuelle Zeile;z
ist undefiniert, daher wird eine Ausnahme ausgelöst, die definitiv keine positive Ganzzahl ist und die\/
Situation behandelt.quelle
05AB1E , 37 Bytes
Eingabe als mehrzeilige Zeichenfolge. Gibt aus,
\/
wenn der Ball feststeckt.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
CJam, 61 Bytes
Wenn die Regel bezüglich
\/
aufgehoben wird (und wir nicht verpflichtet sind, damit umzugehen), kann dies auf 41 Bytes verkürzt werden :quelle
Java 10,
213208190 BytesWirft einen Division durch Null-Fehler, wenn wir in a stecken
\/
.-5 Bytes dank @EdgyNerd .
Erläuterung:
Probieren Sie es hier aus.
quelle
Python 3 , 124 Bytes
Probieren Sie es online!
Funktioniert auch in Python 2.
Erläuterung
quelle
J , 95 Bytes
Probieren Sie es online!
Gibt unendlich zurück,
_
wenn der Ball stecken bleibt. Verlor viele Bytes bei der Behandlung dieses Sonderfalls. Ansonsten handelt es sich mehr oder weniger um eine einfache Reduzierung der Zeilen. Könnte sicherlich weiter golfen werden.quelle