Eine Flow Snake, auch Gosper-Kurve genannt , ist eine fraktale Kurve, deren Größe mit jeder Ordnung / Iteration eines einfachen Prozesses exponentiell zunimmt. Nachfolgend finden Sie Details zum Aufbau und einige Beispiele für verschiedene Bestellungen:
Bestellung 1 Flow Snake :
____
\__ \
__/
Bestellung 2 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \
/ __ \__ \ \/
\ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Bestellung 3 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \ ____
/ __ \__ \ \/ / __ \__ \
____ \ \ \__/ / __ \/ / __/ / __
____ \__ \ \/ ____ \/ / __/ / __ \ \ \
\__ \__/ / __ \__ \__/ / __ \ \ \ \/
__/ ____ \ \ \__/ ____ \ \ \ \/ / __
/ __ \__ \ \/ ____ \__ \ \/ / __ \/ /
\ \ \__/ / __ \__ \__/ / __ \ \ \__/
\/ ____ \/ / __/ ____ \ \ \ \/ ____
\__ \__/ / __ \__ \ \/ / __ \__ \
__/ ____ \ \ \__/ / __ \/ / __/ / __
/ __ \__ \ \/ ____ \/ / __/ / __ \/ /
\/ / __/ / __ \__ \__/ / __ \/ / __/
__/ / __ \ \ \__/ ____ \ \ \__/ / __
/ __ \ \ \ \/ ____ \__ \ \/ ____ \/ /
\ \ \ \/ / __ \__ \__/ / __ \__ \__/
\/ / __ \/ / __/ ____ \ \ \__/
\ \ \__/ / __ \__ \ \/
\/ \ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Konstruktion
Betrachten Sie die Reihenfolge, in der 1 Flow Snake aus einem Pfad mit 7 Kanten und 8 Scheitelpunkten aufgebaut wird (unten beschriftet. Aus Gründen der Durchführbarkeit vergrößert):
4____5____6
\ \
3\____2 7\
/
0____1/
Jetzt ersetzen Sie bei jeder nächsten Bestellung einfach die Kanten durch eine gedrehte Version dieses Musters der ursprünglichen Bestellung 1. Verwenden Sie die folgenden 3 Regeln, um die Kanten zu ersetzen:
1 Ersetzen Sie eine horizontale Kante durch die ursprüngliche Form wie folgt:
________
\ \
\____ \
/
____/
2 Ersetzen Sie eine /
Kante ( 12
in der obigen Konstruktion) durch die folgende gedrehte Version:
/
/ ____
\ / /
\/ /
/
____/
3 Ersetzen Sie eine \
Kante ( 34
und 67
höher) durch die folgende gedrehte Version:
/
/ ____
\ \ \
\ \ \
\ /
\/
So sieht beispielsweise die Reihenfolge 2 mit den Eckpunkten aus der Reihenfolge 1 wie folgt aus
________
\ \
________ \____ \6
\ \ / /
\____ \5___/ / ____
/ \ \ \
4___/ ________ \ \ \7
/ \ \ \ /
/ ____ \____ \2 \/
\ \ \ / /
\ \ \3___/ / ____
\ / \ / /
\/ ________ \/ /
\ \ /
\____ \1___/
/
0___/
Für eine höhere Ordnung zerlegen Sie jetzt einfach den aktuellen Pegel in Kanten der Längen 1 /
, 1 \
oder 2 _
und wiederholen den Vorgang. Beachten Sie, dass auch nach dem Ersetzen die gemeinsamen Eckpunkte zwischen zwei aufeinanderfolgenden Kanten immer noch übereinstimmen.
Herausforderung
- Sie müssen eine Funktion eines vollständigen Programms schreiben, das eine einzelne Ganzzahl
N
über das Argument STDIN / ARGV / function oder das nächste Äquivalent empfängt und die ReihenfolgeN
Flow Snake auf STDOUT ausgibt. - Die eingegebene Ganzzahl ist immer größer als
0
. - Es sollten keine führenden Leerzeichen vorhanden sein, die nicht Teil des Musters sind.
- Es sollten entweder keine nachgestellten Leerzeichen oder genügend nachgestellte Leerzeichen vorhanden sein, um das Muster aufzufüllen und das minimale Begrenzungsrechteck vollständig auszufüllen.
- Der Zeilenumbruch ist optional.
Wissenswertes
- Flow Snakes ist ein Wortspiel von Schneeflocken, das in diesem Muster der Ordnung 2 und höher ähnelt
- Der Fluss und die Schlangen spielen tatsächlich eine Rolle im Muster, da das Muster aus einem einzelnen Pfad besteht, der durch das Muster fließt.
- Wenn Sie genau hinschauen, besteht das Muster der Ordnung 2 (und höher) aus Rotationen des Musters der Ordnung 1, die auf dem gemeinsamen Scheitelpunkt der aktuellen und der vorherigen Kante gedreht sind.
- Es gibt eine Nicht-ASCII-Variante von Flow Snakes, die hier und an mehreren anderen Stellen zu finden ist.
Dies ist Code-Golf, also gewinnen Sie den kürzesten Code in Bytes!
Bestenliste
Der erste Beitrag der Serie generiert eine Rangliste.
Um sicherzustellen, dass Ihre Antworten angezeigt werden, beginnen Sie jede Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes