Tulis program terkecil yang Anda bisa untuk membuat frakta afin. Anda dapat menggunakan metode apa pun yang Anda rasa menghasilkan hasil yang sama seperti aturan di bawah ini. Anda tidak harus menggunakan ide apa pun dari metode yang disarankan!
Program Anda akan mengambil dua input, yang pertama untuk menentukan pola dalam format yang 074
terbuat dari tiga digit dari 0 hingga 7. Input kedua akan menentukan ukuran, 3
akan menjadi 8x8, 4
akan menjadi 16x16 dan seterusnya (2 ^ n). Program Anda harus menampilkan hasil yang benar untuk semua ukuran mulai dari 0 (1x1) hingga minimal 5 (32x32). Jika menghasilkan output untuk angka yang lebih tinggi, itu harus benar, yaitu harus menghasilkan output yang benar hingga ukuran tertentu tetapi tidak menghasilkan output di atas ukuran itu jika itu salah. Anda dapat mengasumsikan ukuran maksimum 15 (32768x32768) karena itu sudah merupakan ukuran gila untuk ASCII art (1GB)!
Pola 8x8 akan terlihat seperti di bawah ini (aturan 160
). Digit paling kiri adalah untuk blok A
, digit tengah (tidak ada pikiran kasar!) Untuk blok B
dan digit paling kanan untuk blok C
. Untuk membangun fraktal, mengecilkannya setengah di kedua dimensi, dan menerapkan aturan rotasi / mirroring untuk blok. Untuk mengecilkan pola, bagilah secara merata menjadi area 2x2. Akan ada 3 karakter yang terlihat atau tidak ada di setiap area. Jika ada karakter yang terlihat, letakkan karakter di tempat yang sesuai di blok yang lebih kecil, jika tidak tempatkan spasi. Aturan 0
- 3
tidak dicerminkan, aturan 4
- 7
dicerminkan. Aturan 0
dan 4
tidak diputar, 1
dan 5
diputar 90 derajat searah jarum jam, 2
dan6
diputar 180 derajat, 3
dan 7
diputar 270 derajat searah jarum jam. Jahit tiga blok bersamaan dalam urutan yang ditunjukkan, A
di sudut kiri atas, B
kiri C
bawah dan kanan bawah.
AAA
AA A
AA
A
BBB CC
B BBC
BBCCC
B CCC
Menyusut, diputar dan dicerminkan oleh nomor aturan:
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
Aturan:
- Tidak dicerminkan, Diputar 90 derajat searah jarum jam
- Tidak dicerminkan, Diputar 180 derajat searah jarum jam
- Tidak dicerminkan, Diputar 270 derajat searah jarum jam
- Dicerminkan tetapi tidak diputar
- Dicerminkan lalu Putar 90 derajat searah jarum jam
- Dicerminkan kemudian Diputar 180 derajat searah jarum jam
- Dicerminkan kemudian Diputar 270 derajat searah jarum jam
- Aturan 0: Tidak dicerminkan, Tidak diputar
Mirroring selalu dilakukan terlebih dahulu dan dilakukan secara diagonal melalui sudut kosong misalnya aturan 0 vs aturan 4:
0 4
---- ----
AA / C /
A / CC/
BBC BB A
/BCC /BAA
Hanya aturan 1
, 6
dan 0
digunakan dalam pola di atas, dalam urutan itu. Setelah transformasi diterapkan dan blok dijahit bersama akan terlihat seperti di bawah ini kecuali saya telah menempatkan setiap blok dari satu sama lain dengan satu spasi. Kode Anda tidak akan memiliki ruang ekstra di dalamnya. Jika Anda membandingkannya dengan gambar "induk" Anda akan melihat bahwa ia memiliki karakter yang terlihat di posisi yang sama.
BAA
BB A
CC
C
AAB AA
A BB A
CC BBC
C BCC
Cara lain untuk menghasilkan gambar tanpa menyusut adalah sebagai berikut: Mulai dengan satu karakter:
X
Terapkan transformasi untuk masing-masing dari tiga blok (tidak ada karena hanya satu karakter) dan jahit bersama-sama:
X
XX
Terapkan transformasi untuk masing-masing dari tiga blok lagi:
1
--
XX
X
6 0
-- --
XX X
X XX
Jahit bersama-sama:
XX
X
XXX
XXX
Terapkan transformasi untuk masing-masing dari tiga blok lagi:
1
----
XXX
XX X
XX
X
6 0
---- ----
XXX XX
X XX X
XX XXX
X XXX
Jahit bersama-sama:
XXX
XX X
XX
X
XXX XX
X XXX
XXXXX
X XXX
Anda dapat menggunakan karakter atau karakter apa pun yang dapat dicetak (0x21 - 0x7E) untuk bagian pola yang terlihat tetapi hanya karakter spasi (0x20) untuk bagian yang kosong. Spasi spasi diperbolehkan tetapi tidak boleh ada kosong di luar seluruh kotak (yaitu untuk kotak 8x8 tidak boleh ada karakter di atas kolom 8).
Ada 512 aturan yang berbeda, tetapi beberapa dari mereka menghasilkan pola yang sama. Sebagai catatan tambahan, pola apa pun yang hanya berisi 0
dan 4
akan menghasilkan segitiga Sierpinski (8 aturan berbeda).
Anda dapat memposting pola favorit Anda dan aturan yang menghasilkannya. Jika ya, pastikan ukurannya minimal 3 (8x8) untuk membedakannya dari aturan yang sama.
Jawaban:
CJam,
63 57 5452 byteCara kerjanya :
Ide dasarnya adalah Anda menjalankan perulangan, jumlah input kedua kali. Di setiap loop, mulai dari array tunggal array yang berisi
0
([[0]]
), kami membuat fraktal untuk langkah berikutnya menggunakan tiga aturan, mengisi kuadran kosong dan menyiapkan kuadran untuk loop berikutnya.Cobalah online di sini
sumber
0
dan James Bond memiliki lisensi untuk membunuh.007
: IndexOutOfBoundsExceptionAPL (Dyalog Classic) , 47 byte
Cobalah online!
sumber