Afin fraktallar oluşturmak için yapabileceğiniz en küçük programı yazın. Aşağıdaki kurallarla aynı sonuçları veren herhangi bir yöntemi kullanabilirsiniz. Önerilen yöntemlerden herhangi bir fikir kullanmak zorunda değilsiniz!
Programınız iki giriş alacaktır, birincisi, deseni 074
0 ile 7 arasında üç basamaktan oluşan formatta tanımlamaktır. İkinci giriş, boyutu tanımlayacak, 3
8x8, 4
16x16 ve benzeri olacaktır (2 ^ n). Programınız 0 (1x1) ile en az 5 (32x32) arasındaki tüm boyutlar için doğru sonucu vermelidir. Daha yüksek sayılar için herhangi bir çıktı üretiyorsa, doğru olmalıdır, yani belirli bir boyuta kadar doğru çıktı üretmeli, ancak yanlış olursa bu boyutun üzerinde çıktı üretmemelidir. ASCII sanatı (1GB) için zaten çılgın bir boyut olduğu için maksimum 15 (32768x32768) boyutuna sahip olabilirsiniz!
8x8 modeli aşağıdaki gibi görünecektir (kural 160
). En soldaki rakam blok için A
, orta rakam (lütfen kaba düşünceler yok!) Ve blok için B
en sağdaki rakam olacaktır C
. Fraktal oluşturmak için, her iki boyutta da yarım küçültün ve blok için döndürme / yansıtma kuralını uygulayın. Deseni daraltmak için eşit olarak 2x2 alana bölün. 3 görünür karakter olacak veya her alanda hiçbiri olmayacak. Görünür karakterler varsa, bir karakteri daha küçük blokta uygun yere yerleştirin, aksi takdirde bir boşluk bırakın. Kurallar 0
- 3
yansıtılmaz, kurallar 4
- 7
yansıtılır. Kurallar 0
ve 4
döndürülmez 1
ve 5
saat yönünde 90 derece döndürülür 2
ve6
180 derece döndürülür 3
ve 7
saat yönünde 270 derece döndürülür. Üç bloğu, A
sol üst köşede, B
sol C
altta ve sağ altta gösterilen sırada birleştirin .
AAA
AA A
AA
A
BBB CC
B BBC
BBCCC
B CCC
Kural numarasına göre küçültülmüş, döndürülmüş ve yansıtılmış:
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
Kurallar:
- Aynalı değil, saat yönünde 90 derece döndürüldü
- Aynalı değil, 180 derece saat yönünde döndürüldü
- Aynalı değil, 270 derece saat yönünde döndürülmüş
- Yansıtılmış ancak döndürülmemiş
- Aynalanmış sonra saat yönünde 90 derece döndürülmüş
- Aynalı ve daha sonra saat yönünde 180 derece döndürüldü
- Aynalanmış sonra saat yönünde 270 derece döndürülmüş
- Kural 0: Aynalı değil, Döndürülmedi
Yansıtma her zaman önce yapılır ve boş köşeden çapraz olarak yapılır, örneğin kural 0'a karşı kural 4:
0 4
---- ----
AA / C /
A / CC/
BBC BB A
/BCC /BAA
Sadece kuralları 1
, 6
ve 0
bu sırayla, yukarıdaki desen kullanılmaktadır. Dönüşümler uygulandıktan ve bloklar birbirine dikildikten sonra, her bloğu birbirinden bir boşlukla ayırmam dışında aşağıdaki gibi görünecektir. Kodunuzda bu fazladan boşluk olmayacak. "Üst" görüntü ile karşılaştırdığınızda, aynı konumlarda görünür karakterler olduğunu görürsünüz.
BAA
BB A
CC
C
AAB AA
A BB A
CC BBC
C BCC
Görüntüyü daraltmadan oluşturmanın başka bir yolu da şöyledir: Bir karakterle başlayın:
X
Üç bloğun her biri için dönüşümleri uygulayın (yalnızca bir karakter olduğu için yok) ve blokları birbirine dikin:
X
XX
Üç bloğun her biri için dönüşümleri tekrar uygulayın:
1
--
XX
X
6 0
-- --
XX X
X XX
Onları birleştirin:
XX
X
XXX
XXX
Üç bloğun her biri için dönüşümleri tekrar uygulayın:
1
----
XXX
XX X
XX
X
6 0
---- ----
XXX XX
X XX X
XX XXX
X XXX
Onları birleştirin:
XXX
XX X
XX
X
XXX XX
X XXX
XXXXX
X XXX
Desenin görünen kısmı için herhangi bir yazdırılabilir karakter veya karakter (0x21 - 0x7E) kullanabilirsiniz, ancak boşluklar için yalnızca boşluk karakteri (0x20) kullanabilirsiniz. Sondaki boşluklara izin verilir, ancak tüm karenin dışında boşluk olmamalıdır (yani 8x8 kare için sütun 8'den sonra hiç karakter olamaz).
512 farklı kural vardır, ancak bazıları aynı modeli üretir. Yan not olarak, sadece Sierpinski üçgenini içeren 0
ve 4
üretecek herhangi bir desen (8 farklı kural).
İsteğe bağlı olarak favori deseninizi ve onu oluşturan kuralı gönderebilirsiniz. Bunu yaparsanız, benzer kurallardan ayırt etmek için boyutun en az 3 (8x8) olduğundan emin olun.