Schreiben Sie das kleinste Programm, das Sie können, um affine Fraktale zu erstellen. Sie können jede Methode verwenden, die Ihrer Meinung nach die gleichen Ergebnisse wie die folgenden Regeln liefert. Sie müssen keine Ideen aus den vorgeschlagenen Methoden verwenden!
Ihr Programm verwendet zwei Eingaben, die erste, um das Muster in dem 074
dreistelligen Format von 0 bis 7 zu definieren. Die zweite Eingabe definiert die Größe, 3
ist 8x8, 4
ist 16x16 und so weiter (2 ^ n). Ihr Programm muss für alle Größen von 0 (1x1) bis mindestens 5 (32x32) das richtige Ergebnis ausgeben. Wenn es eine Ausgabe für höhere Zahlen erzeugt, muss es korrekt sein, dh es muss die korrekte Ausgabe bis zu einer bestimmten Größe erzeugen, aber keine Ausgabe über dieser Größe erzeugen, wenn es falsch wäre. Sie können eine maximale Größe von 15 (32768x32768) annehmen, da dies bereits eine verrückte Größe für ASCII-Grafiken (1 GB) ist!
Ein 8x8-Muster sieht ungefähr so aus wie unten (Regel 160
). Die am weitesten links stehende Ziffer ist für Block A
, die mittlere Ziffer (bitte keine unhöflichen Gedanken!) Für Block B
und die am weitesten rechts stehende Ziffer für Block C
. Um das Fraktal zu konstruieren, verkleinern Sie es in beiden Dimensionen um die Hälfte und wenden Sie die Rotations- / Spiegelungsregel für den Block an. Um das Muster zu verkleinern, teilen Sie es gleichmäßig in 2x2 Bereiche. In jedem Bereich sind entweder 3 Zeichen sichtbar oder keine. Wenn sichtbare Zeichen vorhanden sind, platzieren Sie ein Zeichen an der entsprechenden Stelle im kleineren Block, andernfalls platzieren Sie ein Leerzeichen. Regeln 0
- 3
werden nicht gespiegelt, Regeln 4
- 7
werden gespiegelt. Regeln 0
und 4
werden nicht gedreht 1
und 5
werden um 90 Grad im Uhrzeigersinn gedreht, 2
und6
werden um 180 Grad 3
und 7
um 270 Grad im Uhrzeigersinn gedreht. Nähen Sie die drei Blöcke in der angegebenen Reihenfolge A
in der oberen linken Ecke, B
unten links und C
unten rechts zusammen.
AAA
AA A
AA
A
BBB CC
B BBC
BBCCC
B CCC
Geschrumpft, gedreht und gespiegelt durch die Regelnummer:
0 1 2 3 4 5 6 7
---- ---- ---- ---- ---- ---- ---- ----
AA BAA CCB C C BCC AAB AA
A BB A CBB CC CC BBC A BB A
BBC CC A A BB BB A A CC CBB
BCC C AA AAB BAA AA C CCB
Regeln:
- Nicht gespiegelt, um 90 Grad im Uhrzeigersinn gedreht
- Nicht gespiegelt, um 180 Grad im Uhrzeigersinn gedreht
- Nicht gespiegelt, um 270 Grad im Uhrzeigersinn gedreht
- Gespiegelt, aber nicht gedreht
- Gespiegelt und dann um 90 Grad im Uhrzeigersinn gedreht
- Gespiegelt und dann um 180 Grad im Uhrzeigersinn gedreht
- Gespiegelt und dann um 270 Grad im Uhrzeigersinn gedreht
- Regel 0: Nicht gespiegelt, nicht gedreht
Die Spiegelung erfolgt immer zuerst und diagonal durch die leere Ecke, zB Regel 0 gegen Regel 4:
0 4
---- ----
AA / C /
A / CC/
BBC BB A
/BCC /BAA
Nur Regeln 1
, 6
und 0
sind in dem obigen Muster, in dieser Reihenfolge verwendet. Nachdem die Transformationen angewendet und die Blöcke zusammengefügt wurden, sieht es wie folgt aus, außer dass ich jeden Block um ein Leerzeichen voneinander entfernt habe. Ihr Code enthält keinen zusätzlichen Speicherplatz. Wenn Sie es mit dem "übergeordneten" Bild vergleichen, werden Sie sehen, dass es sichtbare Zeichen an denselben Positionen hat.
BAA
BB A
CC
C
AAB AA
A BB A
CC BBC
C BCC
Eine andere Möglichkeit, das Bild zu erzeugen, ohne es zu verkleinern, ist folgende: Beginnen Sie mit einem Zeichen:
X
Wenden Sie die Transformationen für jeden der drei Blöcke an (keiner, da es sich nur um ein Zeichen handelt) und nähen Sie die Blöcke zusammen:
X
XX
Wenden Sie die Transformationen für jeden der drei Blöcke erneut an:
1
--
XX
X
6 0
-- --
XX X
X XX
Nähen Sie sie zusammen:
XX
X
XXX
XXX
Wenden Sie die Transformationen für jeden der drei Blöcke erneut an:
1
----
XXX
XX X
XX
X
6 0
---- ----
XXX XX
X XX X
XX XXX
X XXX
Nähen Sie sie zusammen:
XXX
XX X
XX
X
XXX XX
X XXX
XXXXX
X XXX
Sie können für den sichtbaren Teil des Musters beliebige druckbare Zeichen (0x21 - 0x7E) verwenden, für die Leerzeichen jedoch nur das Leerzeichen (0x20). Nachgestellte Leerzeichen sind zulässig, es dürfen jedoch keine Leerzeichen außerhalb des gesamten Quadrats vorhanden sein (dh für ein 8 x 8-Quadrat dürfen nach Spalte 8 keine Zeichen stehen).
Es gibt 512 verschiedene Regeln, aber einige von ihnen erzeugen das gleiche Muster. Als Randnotiz: Jedes Muster, das nur das Sierpinski-Dreieck enthält 0
und 4
erzeugt (8 verschiedene Regeln).
Sie können optional Ihr Lieblingsmuster und die Regel, die es generiert, veröffentlichen. Wenn Sie dies tun, stellen Sie sicher, dass die Größe mindestens 3 (8 x 8) beträgt, um sie von ähnlichen Regeln zu unterscheiden.
Antworten:
CJam,
63 57 5452 BytesWie es funktioniert :
Die Grundidee ist, dass Sie eine Schleife ausführen, die zweite Eingabe mehrmals. In jeder Schleife erstellen wir ausgehend von einem einzelnen Array von Arrays, die
0
([[0]]
) enthalten, das Fraktal für den nächsten Schritt unter Verwendung der drei Regeln, füllen den leeren Quadranten und bereiten die Quadranten für die nächste Schleife vor.Probieren Sie es hier online aus
quelle
0
und James Bond eine Lizenz zum Töten hat.007
: IndexOutOfBoundsExceptionAPL (Dyalog Classic) , 47 Bytes
Probieren Sie es online aus!
quelle