Diese Herausforderung findet in einem Raster statt.
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
Dies ist 10 x 10, aber es kann jede rechteckige Form sein.
Es gibt vier Richtungen in diesem Raster. Hoch, runter, links und rechts.
Die Aufgabe besteht darin, einen Pfad zu zeichnen, der mit einem Richtungsinitial in Großbuchstaben beginnt. In diesem Beispiel geht es direkt von der U nach oben.
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| U |
+----------+
Der Pfad geht nach oben und besteht aus Punktzeichen (.), Bis er an eine Wand stößt und mit einem Sternchen (*) endet.
+----------+
| * |
| . |
| . |
| . |
| . |
| . |
| . |
| . |
| U |
+----------+
Zusätzlich zu den Pfadstarts gibt es auch Richtungsänderer, die durch ein Richtungsinitial in Kleinbuchstaben dargestellt werden.
+----------+
| |
| |
| |
| r.....*|
| . |
| . |
| . |
| . |
| U |
+----------+
Auch ein Großbuchstabe X ist ein Hindernis, das den Pfad beendet.
+----------+
| |
| |
| |
| |
| r...*X |
| . |
| . |
| . |
| U |
+----------+
Regeln
- Die Eingabe ist eine Zeichenfolge, die aus einem Rahmen (bestehend aus |, - und + Zeichen) besteht, der Zeichen für Pfadanfang, Richtungsänderungen und Hindernisse enthält.
- Ihr Code sollte Punktzeichen hinzufügen, um dem von Starts und Richtungswechslern beschriebenen Pfad zu folgen, und ein Sternchen, wenn der Pfad auf eine Wand oder ein Hindernis stößt.
- Es kann mehrere Pfadstarts geben.
- Der Code wird weiterhin fehlerfrei beendet, wenn der Pfad eine Schleife beschreibt.
- Wenn ein Pfad auf einen Pfadanfang trifft, fungiert er als Richtungswechsler.
- Es ist Code-Golf, Low-Byte-Code und keine Standard-Lücken, bitte.
- Ich bevorzuge immer Links zu einem Online-Dolmetscher.
Testfälle
1: Einfach
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| . |
| . |
| . |
| . |
| . |
| U |
+----------+
2: Rechts abbiegen
+----------+
| |
| |
| |
| r |
| |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| r.....*|
| . |
| . |
| . |
| . |
| U |
+----------+
3: Kreuzung
+----------+
| |
| |
| |
| r d |
| |
| u l |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| . r..d |
| . . . |
| u....l |
| . |
| . |
| U |
+----------+
4: 4 Wege kreuzen
+----------+
| D |
| |
| |
|R |
| |
| L|
| |
| |
| U |
+----------+
+----------+
| * D |
| . . |
| . . |
|R........*|
| . . |
|*........L|
| . . |
| . . |
| U * |
+----------+
5: Erste Schleife
+----------+
| |
| |
| |
| r d |
| |
| u l |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| r..d |
| . . |
| u..l |
| . |
| . |
| U |
+----------+
6: Starter als Wechsler
+----------+
| |
| |
| |
| L |
| |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
|*..L |
| . |
| . |
| . |
| . |
| U |
+----------+
7: Gerade Schleife
+----------+
| |
| |
| |
| |
| r l |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| |
| r..l |
| . |
| . |
| . |
| U |
+----------+
8: Enger Knoten
+----------+
| |
| |
| |
| d l |
| r u |
| r u |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| d..l |
| .r.u |
| r.u |
| . |
| . |
| U |
+----------+
9: Ein Hindernis
+----------+
| |
| |
| |
| |
| r X |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| |
| r...*X |
| . |
| . |
| . |
| U |
+----------+
10: S-Form
+----------+
|r d |
| |
| XXXXXXXX|
| d l |
|ul |
|XXXXXXX |
| |
|R u |
| |
+----------+
+----------+
|r.....d |
|. * |
|. XXXXXXXX|
|.d......l |
|ul . |
|XXXXXXX . |
| . |
|R.......u |
| |
+----------+
11: 4-Wege-Knoten
+----------+
| D |
| |
| r |
|R d |
| |
| u L|
| l |
| |
| U |
+----------+
+----------+
| * D |
| . . |
| r.....*|
|R....d. |
| .... |
| .u....L|
|*.....l |
| . . |
| U * |
+----------+
12: Busy Junctions
+----------+
|rrrrr rrrd|
| rlrl |
|ul rrd |
|ruX X |
|udl ll |
|ull |
|rlr |
|rdr d |
|Uruull |
+----------+
+----------+
|rrrrr.rrrd|
|.rlrl .|
|ul rrd .|
|ruX.X. .|
|udl.ll .|
|ull. .|
|rlr. .|
|rdr..d .|
|Uruull *|
+----------+
13: Startet in Edge
+----------+
| U |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
+----------+
| U |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
14: Überqueren von toten Pfaden
+----------+
| |
| |
| |
| R |
| |
| |
| |
| |
| U|
+----------+
+----------+
| *|
| .|
| .|
| R..*|
| .|
| .|
| .|
| .|
| U|
+----------+
Antworten:
JavaScript (ES6),
191 183181 ByteVielen Dank an @tsh für die Behebung eines Fehlers
Nimmt die Eingabe als eine Matrix von Zeichen. Ausgänge durch Ändern des Eingangs.
Probieren Sie es online!
Kommentiert
quelle
[...""+a].map
könnte ein Array mit mindestens 2x Länge von a erstellen. Ich bin mir nicht sicher, ob es hilft.(a+0)[n]
Speichert ein Byte, obwohl esn
jetzt initialisiert werden muss.Python 2 ,
283279293288279 BytesProbieren Sie es online!
Nimmt eine Liste von Listen auf.
Ausgabe durch Ändern des Eingabearrays.
quelle
Perl 5,
203188166 BytesTIO
Wie es funktioniert
$s=$_
Speichern von Eingaben in$s
, um Kleinbuchstaben-Wechsler wiederherzustellen.$_|=$s
weil bitweise oder mit Leerzeichenwird sich nicht ändern
.
und*
Kleinbuchstabenurld
mit bitweisen oder Operationen wiederhergestellt werden./\n/;$n='.'x"@-"
"width" bekommen und$n
jedes Zeichen "width" mal zu finden$l='\K[ a-z](?=';$t='([-|X])?'
Regex-Länge zu reduzieren;$l
um einen Kleinbuchstabenurld
oder ein Leerzeichen auf einem Pfad zu finden,$t
um einen Terminator zu finden.Nach ersatz:
(?| R[.*]*\K[ a-z](?=([-|X])?) | ([-|X])?\K[ a-z](?=[.*]*L) | D$n(?:[.*]$n)*\K[ a-z](?=$n([-|X])?) | ([-|X])?$n\K[ a-z](?=$n([.*]$n)*U) )
/e
zu eval,/s
so dass.
(inside$n
) auch ein Newline-Zeichen passt$&eq$"?$1?'*':'.':uc$&
wenn ein Raum angepasst ist, wenn termiator angepasst*
sonst.
sonst groß geschrieben.quelle
$s
in der Fußzeile behoben ist .$s
Dient zum Speichern der Eingabe und zum Wiederherstellen von Kleinbuchstaben, da beim Zeichnen des Pfads die Großbuchstaben umgeschaltet werdenSauber , 409 Bytes
Probieren Sie es online!
quelle
Python 2 , 250 Bytes
Probieren Sie es online!
Nimmt eine Liste von Listen mit Zeichenfolgen auf, wie dies vom OP ausdrücklich erlaubt ist.
Ändert die Liste.
Verwenden Sie diese Option, um die E / A zu vereinfachen .
quelle