Vor langer Zeit, als ich mehr Zeit mit Rollenspielen verbrachte, bestand eines der Probleme einiger Spieler darin, die Partybewegung zu verfolgen und die richtige Karte zu zeichnen. Also habe ich eine Idee, um zu überprüfen, wie ihr mit diesem Problem umgeht.
Aufgabe ist es, eine Funktion zu schreiben, die als Eingabeparameter Liste der Richtungen (als Struktur Ihrer Wahl übergeben) verwendet ^v<>
, Karte des Dungeons anzuzeigen. Im Beispiel für Eingabe: >>>vvv<<<^^^
Ausgabe ist:
+----+ +----+
| | |>>>v|
| ++ | |^++v|
| ++ | because |^++v|
| | |^<<<|
+----+ +----+
Testfälle
>>>>>>vvvvv<<<<^^^>>v
+-------+
| |
+-+---+ |
| | |
| + | |
| +-+ |
| |
+-----+
^^^^^vvv<<<^^vv>>>>>>>>vv>><<^^^^v>>>>v^<^
+-+
+-+| | +-++-+
| || | | ++ ++
| ++ +-+ |
| +-+ |
+--+ +-+ +-+-+
| | | |
+-+ +---+
Da es sich um eine Golfcode-Herausforderung handelt, gewinnt der kürzeste Code.
Viel Spaß beim Golfen.
BEARBEITEN Entschuldigung für die späte Bearbeitung, ich hatte in letzter Zeit nicht viel Zeit.
Die Karte wird basierend auf der Bewegung generiert. Es sollte nur Korridore enthalten, die während des Spaziergangs besucht wurden. Daher ist die Schaffung eines großen Raums keine gültige Antwort.
Die Karte enthält drei gültige Symbole:
|
vertikale Wand|
horizontale Wand+
Schnittpunkt von vertikaler und horizontaler Wand.
Die maximale Länge des Pfades beträgt 255 Zeichen (aber wenn Sie können, beschränken Sie sich nicht).
Weitere Testfälle:
><><><><
+--+
| |
+--+
>^<v
+--+
| |
| |
+--+
Ich hoffe jetzt ist alles klar.
vvv>>^^^<<
(Kreuze? Rohre?) Produzieren würdeAntworten:
Javascript (ES6),
261254243 BytesJSFiddle
quelle
return
indem Sie das;
mit,
und das{}
mit()
for
Schleife, die auf diese Weise nicht eingebettet werden kann.{
miteval("
und}
mit")
, um den Rückgabecode zu entfernen. codegolf.stackexchange.com/a/80967/41042'\\n'
ob ich das tue. Wenn ich richtig zähle, führt das tatsächlich zu +1 Byte. Oder gibt es eine bessere Möglichkeit, den Zeilenumbruch in die Bewertung einzubetten?\n
da Vorlagenzeichenfolgen wörtlich neue Zeilen unterstützen, aber das würde es immer noch bei der gleichen Byteanzahl belassen. NaC 246 Bytes
Übernimmt die Eingabe als separate Zeichen, zum Beispiel:
Oder bequemer dieses (absichtlich nicht zitierte!) Format:
Oder für (ziemlich ineffiziente) zufällige Eingaben:
Und schließlich
awk
bedeutet das Zuschneiden des Ergebnisses, dass wir viel größer werden können:Ausgaben an stdout. Verwendet die Tatsache, dass das Auffüllen der Karte zulässig ist (erzeugt eine Karte mit einer Kantenlänge von 2 * n + 1, wobei die endgültige Position in der Mitte liegt).
Nervenzusammenbruch
Dies funktioniert, indem die Argumente in umgekehrter Reihenfolge durchlaufen und in umgekehrter Reihenfolge verschoben werden. Es wird tatsächlich die Tatsache verwendet, dass arg 0 der Programmname ist. Es spielt keine Rolle, wie der Name lautet, aber es ermöglicht uns, sowohl die erste als auch die letzte Zelle (sowie alle dazwischen liegenden Zellen) zu besuchen, ohne dass eine besondere Behandlung erforderlich ist.
quelle