Ein Freund von Ihnen hat Ihnen eine Wegbeschreibung zum besten Restaurant der Stadt gegeben. Es ist eine Reihe von Links- und Rechtskurven. Leider haben sie vergessen zu erwähnen, wie lange Sie zwischen diesen Kurven geradeaus fahren müssen. Zum Glück haben Sie einen Stadtplan mit allen Restaurants. Vielleicht können Sie herausfinden, welches Restaurant gemeint ist?
Eingang
Die Karte wird als rechteckiges Raster aus ASCII-Zeichen dargestellt. .
ist eine Straße, #
ein Gebäude, A
um Z
die verschiedenen Restaurants. Sie beginnen in der oberen linken Ecke und gehen nach Osten. Beispiel:
.....A
.#.###
B....C
##.#.#
D....E
##F###
Die Anweisungen Ihres Freundes werden als (möglicherweise leere) Zeichenfolge oder Liste von Zeichen ausgegeben, die L
s und R
s enthalten.
Ausgabe
Sie können jeden Pfad gehen, der der Linkskurve und der Rechtskurve in der Eingabezeichenfolge entspricht, vorausgesetzt, Sie gehen vor und am Ende jeweils mindestens einen Schritt vorwärts. Dies bedeutet insbesondere dann, wenn die Zeichenfolge mit beginnt, dass R
Sie in der äußersten linken Spalte nicht sofort nach Süden gehen können. Es bedeutet auch, dass Sie sich vor Ort nicht um 180 ° drehen können.
Sie können nur durch die Gebäude oder Restaurants gehen, die Sie am Ende erreichen. Sie können annehmen, dass die obere linke Ecke a ist .
.
Sie sollten alle Restaurants, die mit den Anweisungen Ihres Freundes erreichbar sind, als Zeichenfolge oder Liste ausgeben.
Sie können davon ausgehen, dass die Anweisungen zu mindestens einem Restaurant führen. Beispielsweise wäre eine einzelne L
für die obige Karte ungültig.
Einige Beispiele für die obige Karte:
<empty> A
R F
RR B,D
RL C,E
RLRL E
RLLR C
RLLL B
RLRR D
RLRRRR A,C
RLLLRLL B
Beachten Sie insbesondere, dass R
nicht erreicht B
.
Sie können ein Programm oder eine Funktion schreiben, indem Sie eine Eingabe über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und das Ergebnis über STDOUT (oder die nächstgelegene Alternative), einen Funktionsrückgabewert oder einen Funktionsparameter (out) ausgeben.
Es gelten die Standardregeln für Code-Golf .
Zusätzliche Testfälle
Hier ist eine größere Karte mit freundlicher Genehmigung von Conor O'Brien (die ich ein wenig modifiziert habe):
.......Y..........................######
.####.....#.##....##..######....#.###.##
B.........#.##.#..##....##...##.#.#P...#
.#.#####..#.##..#.##....##.#....#.####.#
.#.#...C..#.##...G##..#.##.#....#.#....#
.#.#.#.#..#.####.###.#..##.#....#.#.NO.#
.#.#A#.#..#.##...F###...##.#.##.#......#
.#.###....#.##....##....##.#....###....#
.#.....##...##....##...D##........###R.#
.#.##..##...##E...##..######....####...#
.....X....#.#.....................##S.T#
###########.###########M############...#
#................................###.#.#
#.#########.########.######.#.######.#.#
#......V#.....######.IJ...........##.#.#
#########.###......ZH############L##.#.#
#########.##########.###############.#.#
####K##...##########.#....#..........#.#
####....########U......##...#######Q.#.#
#####################################W.#
Und hier sind einige ausgewählte Listen mit Wegbeschreibungen und den erwarteten Ergebnissen:
<empty> Y
RR B
RLL Y
RLRR B,C,X
RLLLRRR G
RLRLRLRL I,Z
RLLRRRLRRLRR C,D,F,G,Y
RLRRLLRLLLRL B,C,Y
RLLRRLRRRLLLL F,M,N,O,Y
RLRRLLLRRRRLLLL F,M,Y
RLRRLRRRRRRRRRR E,F,Y
RLRRRLLLRLLRRLL M,N,O
RLLRRLRRLRLRLRRLLR E,U
RLRLLRLRRLRRRRRLRL F,G,I,Z
RLLRRLLRLLRRRLRRLLRR W
RLLLRRRLRRLLLLLRLLLLLL D,G,X
RLRLLRLRRLRLRRRLRLLLRR B,C,E,J,X
RLRLRLLLLRLRRRRRRLRLRRLR Y
RLRLRRRLRLLLLRLRRLLLLRLLRRL E,M,X
RLRLLLRRRLLLRLLRLLRLRRLRLRR B,E,F,K
RLRRRLLLLLLLLLLLLLLLRRRRLLL A,B
Bonusfrage: Gibt es eine Eingabe, die nur zu I
oder nur zu ergibt U
? Wenn ja, welcher Weg ist der kürzeste?
quelle
Python 2,
180177168163161158 BytesParameter
v
ist die Map als String;o
ist dieLR
Zeichenfolge.Mitch Schwartz sparte
2310viele Bytes. Vielen Dank!Ich sparte zwei Bytes durch Setzen
O={0}
und Rückkehr`O`[9::5]
, die nicht sehr portabel sein könnte: es , dass davon ausgegangenhash(0) == 0
, denke ich, denn das ist die Reihenfolge der Elemente in verursachtrepr(O)
werdenund kreatives Schneiden dieser Zeichenfolge gibt mir die Antwort.
quelle
C ++ 465
C ++ ist so ausführlich ...
Ich werde versuchen, es weiter zu verkürzen. Vorschläge sind willkommen.
quelle