Die Herausforderung
Gegeben ein rechteckiges Zeichenraster
ABCDE FGHIJ KLMNO PQRST
und ein Raster mit den gleichen Abmessungen von Punkten und Räumen
. . . . . . . . . . .
Geben Sie die Zeichenfolge aus, die generiert wird, indem Sie den Punkten durch das Raster in der oberen linken Ecke folgen. Dieses Beispiel würde ergebenABGLQRSNIJE
Anmerkungen
- Sie können die Eingabegitter als 2D-Arrays oder die nächstliegende Alternative in Ihrer Sprache anstelle einer mehrzeiligen Zeichenfolge verwenden.
- Sie können den NULL-Wert Ihrer Sprache anstelle von Leerzeichen verwenden. Sie müssen jedoch Punkte verwenden, um den Pfad zu markieren.
- Sie müssen keine Punkte in derselben Zeile durch Leerzeichen trennen. Ich habe sie nur zur besseren Lesbarkeit hinzugefügt.
- Das kleinstmögliche Raster hat die Größe 1x1.
- Der Start- und Endpunkt haben nur einen Nachbarn. Die Punkte dazwischen haben immer genau zwei vertikale oder horizontale Nachbarn. Dies garantiert, dass der Pfad eindeutig ist.
- Der Weg wird nicht diagonal verlaufen.
- Die Zeichen im Raster sind entweder alle Groß- oder Kleinbuchstaben in dem Bereich,
[a-z]
der für Sie am bequemsten ist. - Der Pfad beginnt immer in der oberen linken Ecke.
Regeln
- Funktion oder Vollprogramm erlaubt.
- Standardregeln für die Eingabe / Ausgabe.
- Es gelten Standardlücken .
- Dies ist Code-Golf , also gewinnt die niedrigste Byte-Anzahl. Tiebreaker ist eine frühere Vorlage.
Testfälle
Gitter # 1
ABCABCW DEFGHUQ XLUSDQZ ASUKWXI WUKOAIM AIAIOUP
. . . . . . . . . . . . => ABEFGSKUSAWA
. . . . . . . . . . . . . . . . . . . . . . . . . => ABCABCWQZIMPUOIAIAWAXLUUK
Gitter 2
Beachten Sie die dreifachen Leerzeichen in den zweiten Zeilen des ersten und zweiten Beispiels.
AB CD
. => A
. . => AB
. . . => ACD
Gitter # 3
EIN
. => A
Viel Spaß beim Codieren!
ABCABCUQXIUOIAIAWAXLUUK
.Antworten:
APL, 63 Bytes
Dies ist eine Funktion, die zwei Zeichenmatrizen akzeptiert (sie müssen Matrizen sein), das Zeichenraster als linkes Argument und das Punktraster als rechtes Argument. Die Punktematrix kann kleiner sein als die Zeichenmatrix.
Erläuterung:
(,⍵='.')/,⍳⍴⍵
: Ermittelt die Positionen der Punkte in der Reihenfolge der Zeilen und Spalten1↓
: Lass den ersten fallen (es ist bekannt, dass er bei ist1 1
)(⊂1 1){
...}
:1 1
Führen Sie ausgehend von die folgende Funktion aus, die dem Pfad folgt (das linke Argument ist die aktuelle Position, das rechte Argument sind nicht besuchte Positionen). Dies funktioniert, indem jedes Mal der nächste nicht besuchte Punkt ausgewählt wird. (Wenn die Annahmen aus der Frage zutreffen, ist dies richtig.)×≢⍵:
: falls es noch unbesuchte Positionen gibt:+/¨2*⍨⍺-⍵
: Ermitteln Sie die Manhattan-Entfernung zwischen jeder Position und der aktuellen PositionV←(+=⌊/)
: Überprüfen Sie für jede Position, ob der Abstand gleich dem kleinsten Abstand ist, und speichern Sie diesen inV
.⍵/⍨~
: Wählen Sie alle Positionen aus, für die dies nicht der Fall ist. Dies sind die Felder, die als nächstes besucht werden müssen(V/⍵)
: Die Position , für die sie finden ist der Fall, wird dies das nächste Feld sein∇
: Führen Sie die Funktion mit diesen neuen Argumenten erneut aus⍺,
: Das Ergebnis ist die aktuelle Position, gefolgt von dem Ergebnis, das Sie für den Rest der Liste erzielt haben⋄⍺
: ansonsten einfach die aktuelle Position zurückgeben und anhalten (es ist die letzte)⍺[
...]
: Wählen Sie für jede Position das entsprechende Element im Zeichenraster aus.Testfälle:
quelle
JavaScript (ES6), 122 Byte
Erläuterung
Nimmt die Gitter als mehrzeilige Zeichenfolgen.
Fühlt sich an wie ein anständiger Versuch, aber mir ging beim Golfen die Zeit aus, sodass es wahrscheinlich verbessert werden könnte.
quelle
APL (Dyalog Classic) , 43 Byte
Probieren Sie es online!
quelle