Ikhtisar
Tulis program yang mencetak pola fraktal sederhana yang diberi pola bit yang mengkodekan fraktal, ditambah faktor skala per generasi dari fraktal dan jumlah generasi.
Penjelasan
Berikut adalah representasi ASCII dari Karpet Sierpinski :
Generasi 0:
#
Generasi 1:
# # #
# #
# # #
Generasi 2:
# # # # # # # # #
# # # # # #
# # # # # # # # #
# # # # # #
# # # #
# # # # # #
# # # # # # # # #
# # # # # #
# # # # # # # # #
Generasi n +1 dari ASCII Sierpinski Carpet terdiri dari kisi 3x3 yang berisi 8 salinan generasi n, dengan elemen sentral kisi tersebut hilang.
Jadi, karena didefinisikan menggunakan kisi 3x3 dan mendapatkan lebar dan tinggi 3 kali lebih besar setiap generasi, kita dapat mengatakan ia memiliki faktor skala 3.
Kita dapat mendefinisikan pola bit untuk karpet Sierpinski dengan memberi nomor elemen pada kisi 3x3 dari 0 hingga 8, dari atas ke bawah, dari kiri ke kanan, dan mengatur bit integer yang sesuai jika generasi n +1 mengandung salinan generasi n pada posisi grid itu:
bit: place value: bit pattern: bit value:
0 1 2 1 2 4 1 1 1 1 2 4
3 4 5 8 16 32 1 0 1 8 0 32
6 7 8 64 128 256 1 1 1 64 128 256
integer value = 1 + 2 + 4 + 8 + 32 + 64 + 128 + 256 = 495
Untuk faktor skala 2, pola bit akan disusun seperti ini:
0 1
2 3
dan seterusnya.
Tugas Anda adalah menulis program yang menerima pola bit dalam formulir ini, faktor skala (mis. 3 untuk Karpet Sierpinski) dan nomor generasi serta menghasilkan fraktal ASCII.
Memasukkan
Program Anda harus menerima 3 bilangan bulat dengan urutan sebagai berikut: pola bit, faktor skala (mulai dari 2 hingga 5, inklusif) dan jumlah generasi (mulai dari 0 hingga 5, inklusif).
Anda tidak perlu melakukan validasi input apa pun pada nilai-nilai ini dan tidak apa-apa jika program bekerja untuk nilai yang lebih besar dari rentang yang ditentukan.
Input dapat dikirimkan dalam bentuk apa pun (tupel, koma / daftar yang dipisahkan ruang, dll)
Keluaran
Program harus menampilkan fraktal yang terdiri dari #
karakter diikuti oleh spasi di posisi di mana fraktal didefinisikan, spasi ganda di mana tidak, dan karakter baris baru di akhir setiap baris, baik mencetaknya atau mengembalikan string dari suatu fungsi.
Contohnya
Memasukkan:
495,3,3
Keluaran (Sierpinski Carpet generasi 3):
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
Memasukkan:
7,2,5
Output ( Segitiga Sierpinski ):
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # #
# # # #
# #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # #
# # # #
# #
# # # # # # # #
# # # #
# # # #
# #
# # # #
# #
# #
#
Memasukkan:
325,3,3
Output ( Debu Cantor ):
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
Memasukkan
186,3,3
Output ( fraktal Vicsek ):
#
# # #
#
# # #
# # # # # # # # #
# # #
#
# # #
#
# # #
# # # # # # # # #
# # #
# # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # #
# # #
# # # # # # # # #
# # #
#
# # #
#
# # #
# # # # # # # # #
# # #
#
# # #
#
Memasukkan:
279,3,3
Output (contoh fraktal asimetris):
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # #
# # #
# # # # # # # # #
# # #
# # #
# # # # # # # # #
# # #
# # #
# # #
#
#
# # #
#
#
# # # # # # # # #
# # #
# # #
# # #
#
#
# # #
#
#
dll.
Catatan:
- Ini adalah kode-golf sehingga jawaban tersingkat dalam byte menang
- Program Anda dapat berupa fungsi yang berdiri sendiri atau yang disebut dengan 3 parameter input dan mengembalikan (atau mencetak) string
- Generasi 0 didefinisikan sebagai
#
(a#
diikuti oleh spasi) bahkan untuk pola bit 0. - Baris tambahan di baris terakhir adalah opsional tetapi diizinkan, seperti halnya jumlah spasi putih di setiap baris.
279,3,3
?
"##"
menjadi"# "
. Saya melihat satu ruang trailing di ujung garis termasuk dalam contoh Anda, apakah itu diperlukan? . Per aturan terakhir saya akan menganggap itu opsional, tetapi fakta bahwa Anda memerlukan ruang tambahan untuk generasi 0 membuat saya bertanya-tanya. Juga saya pikir Anda harus menunjukkan spasi putih dan baris baru (Anda memilikinya jamak) diperbolehkan. Sebagai contoh ekstrim saya selalu bisa mulai dengan array 5 ^ 6 = 15625 baris 2 * 5 ^ 6 spasi kemudian gantikan dengan#
s. Dalam sebagian besar kasus masukan, jumlah ruang putih yang tidak terpakai sangat banyak