Hier ist eine ASCII-Kunst einer 4-Wege-Kreuzung:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
(Beachten Sie, dass die horizontalen Straßen 3 Zeilen hoch sind, während die vertikalen Straßen 5 Spalten breit sind. Dies ist aus ästhetischen Gründen aufgrund der rechteckigen Schrift erforderlich.)
Ihre Herausforderung besteht darin, diese ASCII-Grafik zu erstellen. Wie Sie sicherlich alle wissen, hat nicht jede Kreuzung eine Straße, die in alle Richtungen abfährt. Diese bestimmte Kreuzung verläuft NESW
, aber einige Kreuzungen verlaufen möglicherweise wie folgt NW
:
| | |
| |
| | |
| |
| | |
-----+-----+
| |
- - -| |
| |
-----+-----+
Oder es könnte gehen SWE
:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
Oder es geht sogar E
nur in eine Richtung (obwohl Sie dies kaum als Kreuzung bezeichnen können , aber versuchen Sie zu vermeiden, übermäßig umständlich zu sein):
+-----+-----
| |
| |- - -
| |
+-----+-----
Sie müssen ein Programm oder eine Funktion schreiben, mit denen Sie leicht eine dieser Kombinationen erstellen können. Insbesondere besteht Ihre Herausforderung darin, ein Programm oder eine Funktion zu schreiben, die eine Zeichenfolge von Richtungen NESW
als Eingabe verwendet und diese ASCII-Grafik einer Kreuzung mit in diese Richtungen weisenden Straßen ausgibt oder zurückgibt. Diese Richtungen können in beliebiger Reihenfolge erscheinen, aber die Eingabe nicht enthält alle Zeichen außer für N
, E
, S
, oder W
. Wenn Sie möchten, können Sie stattdessen Eingaben in Kleinbuchstaben anfordern, dies müssen Sie jedoch in Ihrer Antwort angeben. Sie können auch davon ausgehen, dass alle Eingänge mindestens eine Richtung enthalten.
Das letzte Beispiel enthielt führende Leerzeichen in jeder Zeile, da keine Straße nach Westen führt. Wenn Sie keine Straße nach Westen haben, sind diese Leerzeichen optional. Dies:
+-----+-----
| |
| |- - -
| |
+-----+-----
Wäre auch eine akzeptable Ausgabe. In ähnlicher Weise sind leere Zeilen an dieser Stelle optional , wenn N
oder S
weg ist. Eine abschließende neue Zeile ist zulässig, und abschließende Leerzeichen sind zulässig, solange die Ausgabe visuell identisch ist.
Sie können Eingaben und Ausgaben in jedem vernünftigen Format vornehmen, z. B. STDIN / STDOUT, Befehlszeilenargumente, Dateien, Funktionsargumente / Rückgabewerte usw.
Wie üblich ist dies Codegolf . Versuchen Sie daher, die kürzestmögliche Antwort in der Sprache zu erhalten, die Sie gerade verwenden.
Beispiel IO:
NESW:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
NS:
| | |
| |
| | |
| |
| | |
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
S:
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
EW:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
SE:
+-----+-----
| |
| |- - -
| |
+-----+-----
| | |
| |
| | |
| |
| | |
E
gibt)? Sind führende und nachfolgende Leerzeilen zulässig, wenn keineN
oderS
?Antworten:
Javascript (ES6),
190187185 BytesDies ist ein Versuch, dieses ASCII-Zeichen pro Zeichen durch Iteration auf einer 17x15-Matrix zu erstellen. Daher besteht die Ausgabe immer aus 15 Zeilen mit 17 Spalten, wobei der Schnittpunkt der Straßen in der Mitte zentriert ist.
Ungolfed und kommentiert
Matrix
Unten ist die Matrix mit den im Code verwendeten Koordinaten.
Demo
Mit dem folgenden Snippet können Sie eine beliebige Straßenkonfiguration ausprobieren.
quelle
PowerShell v3 +,
226204192191 BytesNimmt Eingaben als Folge von Großbuchstaben und wandelt sie explizit in ein
char
Array um. Konstruiert das "Nord" -Segment durch Schleifen von0
bis4
. Jede Schleife erstellt eine Zeichenfolge mit 5 Leerzeichen (wennW
/87
in der Eingabe vorhanden ist), speichert diese in$x
, dann entweder| |
(gespeichert in$w
) oder| | |
, abhängig davon, ob wir gerade oder ungerade sind. Das Array von Zeichenketten gespeichert ist in$n
, und multipliziert mit , obN
/78
ist-in
der Eingang. Dadurch wird bestimmt, ob$n
in der Pipeline platziert wird oder nicht.Dann konstruieren wir den mittleren Teil. Die erste Zeile
$z
ist die "Spitze" der Ost-West-Route, die dieselbe Logik fürW
undE
/69
oder verwendet und von Parens umgeben ist, um auch eine Kopie in die Pipeline einzufügen. Wir verwenden die Hilfsvariable$y
, um ein Byte in den-----
Abschnitten zu speichern .Die nächste Zeile ist nur die entsprechende Anzahl von Leerzeichen (dh
$x
), die mit den Pipes (dh$w
) mit der richtigen Breite verkettet sind . Dann die mittlere gestreifte Linie, wieder mitW
undE
Logik und$w
Füllung in der Mitte. Dann$x+$w
und$z
wieder.Schließlich, da die Südstraße die gleiche ist wie die Nordstraße, muss
$n
die Pipeline in Betrieb genommen werden, wennS
/83
ist-in
$a
.Alle diese resultierenden Zeichenfolgen werden aus der Pipeline gesammelt und am Ende der Programmausführung implizit ausgegeben. Missbraucht das Standardtrennzeichen
Write-Output
, um eine neue Zeile zwischen Elementen einzufügen.Beispiele
quelle
C ++
317280276 BytesUngolfed:
quelle
strchr
durchindex
wird einige mehr rasieren. Definieren Siex
undy
zusammen außerhalbfor
Schleifen.Python 3, 186 Bytes
Ein anonymer Lambda, der mit einer Reihe von Anweisungen aufgerufen wird, z. B. 'NWS'
Erklärung folgt
quelle
sed 234
Es werden nur die verschiedenen Teile erstellt, wenn das richtige Zeichen in der Zeile steht.
Verwendet
@
anstelle von\n
und taucht\n
am Ende wieder auf.Der Nord- und der Südteil sind identisch, daher benutze ich eine Funktion, um sie einzufügen.
quelle
Batch,
351344341 BytesHinweis: Die Zeile
set t=
endet in fünf Leerzeichen und die Zeileif "%i:e=%"=="%i%" set r=
endet in einem Leerzeichen. Groß- und Kleinschreibung wird von STDIN nicht berücksichtigt. Bearbeiten: 7 Bytes durch Entfernen derd
Variablen gespeichert . 3 Bytes gespart, indem einefor
Schleife zum Drucken des mittleren Abschnitts verwendet wurde. Wenn stattdessen separate Befehlszeilenparameter zulässig sind, gilt für326319316 Byte Folgendes:quelle
Python 2, 290 Bytes
quelle
m,t,s=[],[],[]
könnte seinm=t=s=[]
.range(5)
könnte in einer Variablen gespeichert und zweimal verwendet werden, anstattrange(5)
zweimal zu tippen .m
?t=s=[]
alles durcheinanderm=t=s=[]
sie alle auf denselben Verweis verweisen.GolfScript, 154 Bytes
Probieren Sie es online!
quelle
Pyth (
385380373353 Byte)Golf gespielt:
Ungolfed:
Sollten sich Verbesserungen ergeben, teilen Sie mir dies bitte mit.
5 Bytes gespart dank Maltysen
Sie können es hier ausprobieren
quelle
K
anstelle von verwenden,N
und dann, wenn Sie zum ersten Mal zuweisen, müssen Sie nicht verwenden=
, speichern Sie ein ByteN[:-1]
istP
Groovy (274 Bytes)
Ungolfed
Golf gespielt
Probieren Sie es aus: https://groovyconsole.appspot.com/script/5082600544665600
quelle