Die Hilbert-Kurve ist ein raumfüllendes Fraktal, das als Lindenmayer-System mit folgenden Generationen dargestellt werden kann:
Dank http://www.texample.net/tikz/examples/hilbert-curve/ für das Bild.
Tor
Schreiben Sie das kürzestmögliche Programm (in Bytes), das eine positive ganze Zahl n von stdin nimmt und die Hilbert-Kurve n-ter Ordnung mit nur Schrägstrich, Schrägstrich zurück, Leerzeichen und Zeilenumbruch zu stdout zeichnet.
Wenn zum Beispiel der Eingang 1
der Ausgang ist, muss er sein
\
\/
Wenn der Eingang ist, 2
muss der Ausgang sein
/
\/\
/\ \
/ /\/
\ \
\/
Wenn der Eingang ist, 3
muss der Ausgang sein
\
/\/
/ /\
\/\ \ \
/\ / / /
/ / \/ \/\
\ \/\ /\ \
\/ / / / /\/
/\/ / \ \
\ \/\ \/
\/\ \
/ /\/
\ \
\/
Und so weiter. (Sie sehen besser aus, wenn Sie sie in etwas mit weniger Zeilenabstand einfügen.)
Die Ausgabe sollte keine Zeilenumbrüche über oder unter den äußersten Punkten der Kurve sowie keine nachgestellten Leerzeichen auf den Zeilen enthalten.
.map(&:rstrip)
musste hinzugefügt werden, um die "No Trailing Spaces" -Anforderung zu erfüllen.x
und verkürzt die Zuweisungy
undd
, für insgesamt 205 Zeichen (siehe den gleichen Link wie zuvor).Python, 282
Dies verwendet einen rekursiven Ansatz, um die Hilbert-Kurve n-ter Ordnung aus der vorherigen Kurve zu konstruieren. Die Kurven werden zum besseren Schneiden und Manipulieren als 2d numpy-Array dargestellt.
Hier sind einige Beispiele:
quelle
Malsys -
234221 ZeichenIch rieche hier ein paar L-Systeme :) Malsys ist Online-L-System-Interpreter. Dies ist kein ernstzunehmender Eintrag, aber ich fand diese Lösung etwas interessant.
Die Syntax von Malsys eignet sich nicht wirklich zum Golfen, da sie eine Menge langwieriger Stichwörter enthält, aber dennoch recht kurz, lesbar und aussagekräftig ist.
http://malsys.cz/g/3DcVFMWn
Dolmetscher: http://malsys.cz/Process
Golf Version:
Und wie wäre es mit Ascii hexagonalen Gosper-Kurve? :)
http://malsys.cz/g/ae5v5vGB
quelle
JavaScript (ES6) 313
340Bearbeiten Einige Zeichen wurden mit sehr schlecht entfernt Methoden entfernt wurden - wie die globale Variable w anstelle eines Rückgabewerts von Funktion H
Konvertieren der x, y-Position in den Abstand d (siehe Wikipedia ) für jedes x, y und Überprüfen, ob die nächstgelegenen Positionen verbunden sind.
Test in der FireFox-Konsole. Eingabe über Popup, Ausgabe über console.log.
Es gibt keine nachgestellten Leerzeichen und keine Zeilenumbrüche über oder unter dem Bild. Aber jede Zeile wird mit einem Zeilenumbruch abgeschlossen. Ich denke, das ist der richtige Weg, um ein ASCII-Kunstbild zu erstellen.
quelle
alert
anstelle von verwendenconsole.log
. Sie haben auch ein zusätzliches Leerzeichen nach derfor
vierten Zeile, und Sie sollten in der Lage sein, diesen letzten Zeilenumbruch loszuwerden.Perl, 270 Zeichen
Super golfen
Nicht so viel Golf gespielt
Könnte wahrscheinlich mehr Golf spielen, wenn ich Perl besser verstehe. Verwendet einen Lindenmayer-Systemansatz unter Verwendung der in Zeile 1 definierten Produktionsregeln.
quelle
APL (Dyalog Unicode) , 90 Byte SBCS
Probieren Sie es online!
2 2⍴0
eine 2x2 Matrix von Nullen{ }⍣⎕
Geben Sie N ein und wenden Sie eine Funktion N-mal an⍵,⍨-⊖⍵
Verketten Sie links von der Matrix eine vertikal umgekehrte und negierte Kopie von sich(2×s←⍴⍵)↑
Mit Nullen auffüllen, sodass die Dimensionen (die als gespeichert werdens
) doppelt so groß sind wie die der Argumente¯.5×≢⍵
nach unten drehen, um es vertikal zu zentrieren, zwischen den Füllungsnullen eingeklemmt2@(¯1 0+3 1×s÷2)
setze 2-s an bestimmten Stellen - das sind die Verbindungsstriche zwischen kleineren Instanzen des Fraktals(⊢+⍉)
füge die Matrix mit ihrem transponierten Selbst hinzu3|
Modulo 3; Wir haben die Negation verwendet. Bitte beachten Sie, dass -1≡2 (Mod 3) und -2≡1 (Mod 3)' /\'[ ]
Verwenden Sie die Matrixelemente als Indizes in der Zeichenfolge' /\'
1↓∘⍉∘⌽⍣4
Schneiden Sie den 1-Element-breiten leeren Rand von allen Seiten ab↓
in Zeilen aufgeteilt' +$'⎕r''¨
entferne nachfolgende Leerzeichen von jedem (diese Herausforderung erfordert es)⎕∘←¨
jeweils ausgebenquelle