Napisz najmniejszy program do tworzenia fraktalnych fraktali. Możesz użyć dowolnej metody, która według ciebie generuje takie same wyniki jak poniższe zasady. Nie musisz używać żadnych pomysłów z sugerowanych metod!
Twój program pobierze dwa dane wejściowe, pierwsze określające wzór w formacie 074
złożonym z trzech cyfr od 0 do 7. Drugie wejście określi rozmiar, 3
będzie 8 4
x 8 , będzie 16 x 16 itd. (2 ^ n). Twój program musi wypisać poprawny wynik dla wszystkich rozmiarów od 0 (1x1) do co najmniej 5 (32x32). Jeśli produkuje jakieś dane wyjściowe dla wyższych liczb, musi być poprawne, tj. Musi produkować prawidłowe dane wyjściowe do określonego rozmiaru, ale nie produkować żadnych wyników powyżej tego rozmiaru, jeśli byłoby to błędne. Możesz założyć maksymalny rozmiar 15 (32768 x 32768), ponieważ jest to już szalony rozmiar dla grafiki ASCII (1 GB)!
Wzór 8x8 będzie wyglądał jak poniżej (reguła 160
). Lewa skrajna cyfra będzie oznaczać blok A
, środkowa cyfra (bez grubiańskich myśli proszę!) Dla bloku, B
a skrajna skrajna cyfra dla bloku C
. Aby zbudować fraktal, zmniejsz go o połowę w obu wymiarach i zastosuj regułę obrotu / odbicia dla bloku. Aby zmniejszyć wzór, podziel go równomiernie na 2 x 2 obszary. W każdym obszarze będą albo 3 widoczne znaki, albo żaden. Jeśli są widoczne znaki, umieść znak w odpowiednim miejscu w mniejszym bloku, w przeciwnym razie umieść spację. Reguły 0
- 3
nie są dublowane, reguły 4
- 7
są dublowane. Reguły 0
i 4
nie są obracane 1
i 5
są obracane o 90 stopni zgodnie z ruchem wskazówek zegara, 2
i6
są obracane o 180 stopni 3
i 7
są obracane o 270 stopni zgodnie z ruchem wskazówek zegara. Zszyj trzy bloki razem w pokazanej kolejności, A
w lewym górnym rogu, B
lewym C
dolnym rogu i prawym dolnym rogu.
AAA
AA A
AA
A
BBB CC
B BBC
BBCCC
B CCC
Zmniejszony, obrócony i dublowany według numeru reguły:
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
Zasady:
- Bez odbicia, obrócone o 90 stopni zgodnie z ruchem wskazówek zegara
- Bez odbicia, obrócone o 180 stopni zgodnie z ruchem wskazówek zegara
- Bez odbicia, obrócony o 270 stopni w prawo
- Odbicie lustrzane, ale nie obrócone
- Odbicie lustrzane, a następnie obrócone o 90 stopni zgodnie z ruchem wskazówek zegara
- Odbicie lustrzane, a następnie obrócone o 180 stopni zgodnie z ruchem wskazówek zegara
- Lustrzane, a następnie Obrócone o 270 stopni w prawo
- Reguła 0: Nie dublowana, Nie obrócona
Odbicie lustrzane jest zawsze wykonywane jako pierwsze i odbywa się po przekątnej przez pusty narożnik, np. Reguła 0 vs reguła 4:
0 4
---- ----
AA / C /
A / CC/
BBC BB A
/BCC /BAA
Tylko rządzi 1
, 6
i 0
są wykorzystywane w powyższym wzorze, w tej kolejności. Po zastosowaniu transformacji i zszyciu bloków będzie to wyglądać jak poniżej, z tym wyjątkiem, że rozstawiłem każdy blok od siebie o jedną spację. W twoim kodzie nie będzie tego dodatkowego miejsca. Jeśli porównasz go do obrazu „nadrzędnego”, zobaczysz, że ma widoczne znaki w tych samych pozycjach.
BAA
BB A
CC
C
AAB AA
A BB A
CC BBC
C BCC
Kolejny sposób generowania obrazu bez zmniejszania jest następujący: Zacznij od jednego znaku:
X
Zastosuj transformacje dla każdego z trzech bloków (żaden, ponieważ jest to tylko jedna postać) i zszyj bloki razem:
X
XX
Zastosuj transformacje ponownie dla każdego z trzech bloków:
1
--
XX
X
6 0
-- --
XX X
X XX
Połącz je razem:
XX
X
XXX
XXX
Zastosuj transformacje ponownie dla każdego z trzech bloków:
1
----
XXX
XX X
XX
X
6 0
---- ----
XXX XX
X XX X
XX XXX
X XXX
Połącz je razem:
XXX
XX X
XX
X
XXX XX
X XXX
XXXXX
X XXX
Możesz użyć dowolnego drukowalnego znaku lub znaków (0x21 - 0x7E) dla widocznej części wzoru, ale tylko znak spacji (0x20) dla spacji. Końcowe spacje są dozwolone, ale nie mogą być spacjami poza całym kwadratem (tzn. Dla kwadratu 8x8 nie może być żadnych znaków za kolumną 8).
Istnieje 512 różnych zasad, ale niektóre z nich wytwarzają ten sam wzór. Na marginesie, każdy wzór zawierający tylko 0
i 4
utworzy trójkąt Sierpińskiego (8 różnych zasad).
Możesz opcjonalnie opublikować swój ulubiony wzór i regułę, która go generuje. Jeśli tak, upewnij się, że rozmiar wynosi co najmniej 3 (8 x 8), aby odróżnić go od podobnych reguł.
Odpowiedzi:
CJam,
63 57 5452 bajtyJak to działa :
Podstawową ideą jest to, że uruchamiasz pętlę, drugą liczbę razy. W każdej pętli, zaczynając od pojedynczej tablicy zawierającej
0
([[0]]
), budujemy fraktal dla następnego kroku, stosując trzy reguły, wypełniamy pusty kwadrant i przygotowujemy kwadranty do następnej pętli.Wypróbuj online tutaj
źródło
0
a James Bond ma licencję na zabijanie.007
: IndexOutOfBoundsExceptionAPL (Dyalog Classic) , 47 bajtów
Wypróbuj online!
źródło