Hinweis: Dies basiert auf zwei Straßen, die in einem gelben Wald auseinanderlaufen (Teil 2) , eine frühere Herausforderung von mir. Wegen der Popularität dieser Frage und der Tatsache, dass zwei Straßen in einem gelben Wald auseinander gingen (Teil 1) , wollte ich eine dritte machen. Aber die ersten 2 waren zu einfach (eine 2-Byte- Antwort auf die erste, eine 15-Byte-Antwort auf die zweite). Also habe ich etwas komplexeres gemacht ...
Die Inspiration
Diese Herausforderung ist inspiriert von Robert Frosts berühmtem Gedicht The Road Not Taken :
Zwei Straßen gingen in einem gelben Wald auseinander,
und es tat mir leid, dass ich nicht beide fahren konnte.
Und ich war ein Reisender, lange stand ich
und schaute eine so weit ich konnte hinunter, bis
sie sich im Unterholz bog.... 2 Absätze gekürzt ...
Ich werde dies mit einem Seufzer erzählen.
Irgendwo in Ewigkeit:
Zwei Straßen gingen in einem Wald auseinander, und ich -
ich nahm die weniger befahrene,
und das hat den Unterschied ausgemacht.
Beachten Sie die vorletzte Zeile I took the one less traveled by,
.
Die Hintergrundgeschichte
Sie wurden beauftragt, einem blinden Abenteurer zu helfen, der auf einer Straße läuft und von The Road Not Taken inspiriert wurde . Der Abenteurer nähert sich einer Weggabelung und möchte den weniger befahrenen Weg nehmen. Sie müssen herausfinden, wo sich der Abenteurer tatsächlich befindet, und dem Abenteurer mitteilen, wohin er sich wenden soll.
Die Herausforderung
Ihr Ziel ist es, die am wenigsten befahrene Straße auf Ihrer Karte zu finden, auf der sich die Straße teilt. Ihre Karte ist eine Zeichenfolge mit Zeilenumbrüchen (oder \n
, wenn Sie dies bevorzugen) und hat eine unbekannte Breite und Höhe. In der Karte bestehen Straßen aus den Ziffern 0 bis 9 , die Kreuzung aus #
s. Sie müssen die Straße finden, auf der Sie sich gerade befinden, und von den anderen Straßen die Straße, auf der am meisten gefahren wird, und die Straße, auf der Ihr blinder Abenteurer weniger fährt. Wälder in Ihrer Karte werden durch ein Leerzeichen dargestellt. Hier ist eine einfache Karte:
2 2
1 0
#
2
2
Diese Karte ist 5 breit und 5 groß. Beachten Sie, wie sich die Straße in Y-Form teilt. Das Y kann beliebig ausgerichtet sein, daher müssen Sie in der Lage sein, eine "gedrehte" Karte zu verstehen.
Was #
bedeutet das ?
Wo sich die Karte gabelt, wird es eine geben #
. Dies hat keinen Einfluss auf die Punktzahl eines Pfades.
Was die Zahlen eigentlich bedeuten
Jeder Pfad (eine Zahlenreihe, die möglicherweise eine Biegung aufweist) hat eine Punktzahl. Die Punktzahl eines Pfades wird durch Addition seiner Ziffern bestimmt. Für das erste Beispiel hat der erste Pfad (von links oben im Uhrzeigersinn) eine Punktzahl von 2 + 1 = 3, der zweite 2 + 0 = 2 und der dritte hat 2 + 2 = 4. Straßen können diagonal verbundene Nummern enthalten.
Finden, wo Sie sind
Sie befinden sich auf dem Weg mit der höchsten Punktzahl. Die anderen beiden Pfade sind die Straße, die mehr befahren wird, und die Straße, die weniger befahren wird. Sie müssen die Straße mit der niedrigsten Punktzahl finden.
Sagen Sie Ihrem Reisenden, wohin er gehen soll
Sie müssen Ihrem Reisenden sagen, dass er "links" oder "rechts" gehen soll. Denken Sie daran, dass die Anweisungen aus der Sicht Ihres Reisenden sind (er steht vor der Gabelung).
Beispielkarten
14
9#
04
Ausgabe: "rechts" (Reisender ist an der 9
Straße, 0 + 4 <1 + 4
9
9
9
9
9
#
8 8
8 8
88 88
8 7
Ausgabe: "links" (Reisender ist auf der 99999
Straße, 8 + 8 + 8 + 8 + 8> 8 + 8 + 8 + 8 + 7
02468
#98765
13579
Ausgabe: "rechts" (Reisender ist auf der 98765
Straße, 0 + 2 + 4 + 6 + 8 <1 + 3 + 5 + 7 + 9)
4 2
4 2
#
4
4
2
2
Ausgabe: "rechts" (Reisender ist an der 4422
Straße, 4 + 4> 2 + 2)
9
9
9
#
8 7
8 7
8 7
Ausgabe "links" (Reisender ist an der 999
Straße, 8 + 8 + 8> 7 + 7 + 7
Was Sie wissen sollten:
- Karten werden mit Leerzeichen aufgefüllt, damit jede Zeile dieselbe Länge hat.
- Sie müssen die Zeichenfolge
left
oderright
optional gefolgt von einem nachgestellten Zeilenumbruch an STDOUT / console / file ausgeben. - Sie müssen die Eingabe entweder als Zeichenfolge mit Zeilenumbrüchen,
\n
s oder als Array / Liste von Zeilen annehmen (jede Zeile ist eine Zeichenfolge). Wo diese Eingabe eingegeben wird, muss eine Funktion, ein Befehlszeilenargument, eine Datei oder STDIN zeilenweise oder ähnlich sein. Eine Variable ist kein akzeptables Eingabegerät (es sei denn, es handelt sich um einen Funktionsparameter). Ebenso müssen Funktionsausdrücke in JS und anderen Sprachen einer Variablen zugewiesen werden. - Dies ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
- Standardlücken verboten
Dinge, die Sie annehmen können
- Ihre Eingabe ist gültig. Nichts davon wird getestet auf:
0 0 0 0 0 # 0 0
- Die Punktzahlen der Pfade werden niemals gebunden.
- Die Eingabe kann eine beliebige Länge in Breite oder Höhe haben, die unter dem Zeichenfolgenlimit Ihrer Sprache liegt.
- Zwischen den beiden Pfaden befindet sich immer mindestens ein Leerzeichen.
- Wege können Kurven, Kurven usw. haben. Dies sind Straßen, keine Autobahnen.
Haben Sie Fragen? Fragen Sie mich unten in den Kommentaren und viel Spaß beim Golfen!
quelle
#
immer horizontal in der Mitte sein?Antworten:
D ,
348321312302 BytesUngolfed
Probieren Sie es online aus!
quelle
Python 2, 304 Bytes
Probieren Sie es online aus
Dieses Programm leitet die Richtung der Straßen ab und dreht sie nach oben, um meine Lösung aus Teil 2 dieser Herausforderung zu verwenden.
quelle