Schreiben Sie ein Programm oder eine Funktion, die eine positive Ganzzahl N (über stdin / command line / function arg) einliest und eine Zeichenfolgendarstellung eines zweidimensionalen zufälligen Wegs ausgibt oder zurückgibt , der N Schritte lang ist und aus Schrägstrichen besteht: /
\
(plus Leerzeichen und Zeilenumbrüche für Abstände).
Ein 2D-Zufallsrundgang beginnt am Ursprung eines unendlichen Ganzzahlgitters . Dann wird N-mal wiederholt eine Kardinalrichtung (oben, unten, links, rechts) gleichmäßig nach dem Zufallsprinzip gewählt und der Läufer bewegt sich eine Einheit in diese Richtung. Der daraus resultierende Weg ist der zufällige Weg.
Hier ist ein zufälliger Weg für N = 6. Beachten Sie, dass es auf sich selbst zurückgeht, wenn es (-1, 3) erreicht.
Um dies mit Schrägstrichen zu zeichnen, müssen wir das ganze Ding im Uhrzeigersinn um 45 ° drehen. Die Achsen sowie Start- und Endpunkte werden in der Schrägstrichversion nicht gezeichnet.
/
\
\
/\
Eine komplexere Wanderung wie diese (N = 20, obwohl es keine Möglichkeit gibt zu sagen):
Würde das werden:
/
/\/ /\
\/\/
/\/
\/
Ihr Programm muss diese Art von Schrägstrichen für zufällige Spaziergänge generieren. Sie müssen nach dem Zufallsprinzip jede neue Richtung für die Wanderung auswählen, sodass jedes Programm für ein bestimmtes N mit ziemlicher Sicherheit eine andere Wanderung ergibt. (Pseudozufälligkeit ist in Ordnung.)
Es sollten keine Leerzeilen über oder unter dem niedrigsten und höchsten Schrägstrich (mit Ausnahme eines optionalen abschließenden Zeilenumbruchs) und keine Leerzeilenspalten vor oder nach dem ganz linken und ganz rechten Schrägstrich vorhanden sein.
Für N = 1 ist die Ausgabe also immer /
oder \
, aber niemals so etwas wie:
/
Nachgestellte Leerzeichen sind zulässig, solange sie nicht über die Spalte mit dem Schrägstrich ganz rechts hinausgehen.
Die Einsendung mit den wenigsten Bytes gewinnt. Hier ist ein praktischer Bytezähler.
Antworten:
Pyth, 74 Bytes
Eine noch optimierte Übersetzung der Antwort von Uri Zarfaty.
quelle
"\
- Natürlich gibt es keine Zufälligkeit, aber es ist jedes Mal ein gültiger Spaziergang!Python 2,
300285257246236 BytesEtwas, um die Dinge anzukurbeln. Es sollte möglich sein, dies weiter zu verkleinern. Vielen Dank an @Maltysen für das Rasieren von 10 Bytes.
Erzeugt die Laufausgabe in ein Wörterbuch G der besuchten (x, y) Tupel und aktualisiert dabei unseren Standort. Jeder Zufallsschritt n ist entweder u / d (u) oder l / r (l).
quelle
"".join
an derj in f(1)
Schleife viel sparen und direkt drucken.PHP 5.5 - 209 Bytes
Ungolfed:
Begann von Grund auf mit der Arbeit an einer PHP-Antwort, aber der endgültige Code ähnelte zu sehr der Arbeit von @Uri Zarfaty, so dass ich wirklich nicht den Mut hatte, ihn zu posten. Die Antwort wurde mit ein paar Modifikationen portiert. Schiebt x / y-Werte in
$X
und$Y
Arrays, um min / max in der Ausgabeschleife zu bestimmen.Verwendung:
quelle
Pyth - 89
Dies ist im Grunde eine Übersetzung der Antwort von Uri Zarfaty, obwohl ich einige Optimierungen vorgenommen habe.
Erklärung folgt in Kürze.
Probieren Sie es hier aus .
quelle