Adam7 adalah algoritma interlacing untuk gambar raster, seperti PNG. Ini disebut algoritma "Adam7" karena diciptakan oleh Adam M. Costello, dan dihasilkan dengan mengikuti pola tertentu 7 kali. Salah satu hal keren tentang algoritma Adam7 yang membuatnya sangat menyenangkan untuk kode golf, adalah bahwa polanya dapat diulang beberapa kali secara acak, asalkan aneh. Kembali ketika 1996 ketika PNG
standar dikembangkan, hanya menggunakan 7 iterasi dipandang cukup, karena iterasi 9 terlalu kompleks, dan 5 iterasi tidak seefisien.
Berikut ini adalah iterasi pertama ubin:
a
Cukup mudah. Ini adalah ubin "Adam1". Inilah cara kami mencapai iterasi berikutnya, ubin "Adam3".
Karena ubin terakhir kami adalah 1x1
, kami menggandakan tinggi dan lebar, dan yang berikutnya akan menjadi 2x2
. Pertama, kita mulai dengan 'a' di sudut kiri atas.
a-
--
Langkah 2, salin pola ini ke kanan, dan tingkatkan huruf kita satu per satu.
ab
--
Langkah 3, sama seperti langkah 2, tetapi salin bukan yang benar.
ab
cc
Ledakan. Ubin "Adam3". Mari kita lakukan "Adam5" juga, sehingga Anda benar-benar dapat melihat bagaimana algoritma bekerja. Ubin ini, sekali lagi, akan menjadi dua kali lebih besar, jadi 4x4
. Sekali lagi, kita mulai dengan a
di sudut kiri atas:
a---
----
----
----
Gandakan pola ini, tambah suratnya, dan pindahkan ke kanan:
a-b-
----
----
----
Sekali lagi, kali ini turun.
a-b-
----
c-c-
----
Sekali lagi, kali ini ke kanan.
adbd
----
cdcd
----
Sekali lagi, kali ini turun.
adbd
eeee
cdcd
eeee
Ini adalah ubin "Adam5". Berikut adalah representasi ASCII dari ubin Adam7:
afdfbfdf
gggggggg
efefefef
gggggggg
cfdfcfdf
gggggggg
efefefef
gggggggg
Dan sementara kita melakukannya, ini adalah animasi yang menyenangkan dari setiap langkah ubin Adam7 (meskipun ada beberapa ubin berdampingan):
Tantangan
Diberikan angka ganjil positif N , menampilkan ubin "Adam N ". Anda dapat menggunakan metode IO standar apa pun . Karena kami menggunakan alfabet sebagai pengganti angka, Anda hanya perlu menangani input hingga 25. Anda dapat memilih untuk menampilkan karakter huruf kecil atau huruf besar selama Anda tentukan dan konsisten.
Contoh IO
1:
a
3:
ab
cc
5:
adbd
eeee
cdcd
eeee
7:
afdfbfdf
gggggggg
efefefef
gggggggg
cfdfcfdf
gggggggg
efefefef
gggggggg
9:
ahfhdhfhbhfhdhfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
ehfhehfhehfhehfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
chfhdhfhchfhdhfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
ehfhehfhehfhehfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
Seperti biasa, ini adalah kode-golf, jadi celah standar berlaku, dan jawaban tersingkat dalam byte menang!
c
di dalam testcase9
?Jawaban:
CJam, 20 byte
Cobalah online .
Alternatif 20/21-byte:
sumber
MATL , 23 byte
Cobalah online!
Ini menggunakan produk tensor Kronecker berulang untuk memperluas array, diikuti oleh transposisi. Pada setiap iterasi, kolom baru yang berisi nol disatukan dengan yang lama; angka-angka tersebut kemudian digantikan oleh nilai baru yang sesuai (yang meningkat pada setiap iterasi); dan matriks ditransformasikan.
(Satu byte terbuang karena produk Kronecker Octave tidak memungkinkan input char. Ini akan diperbaiki untuk rilis berikutnya).
Penjelasan
sumber
Perl,
11010410099918987 + 1 (-p
flag) = 88 byteMenggunakan:
Tidak Disatukan:
Ideone .
sumber
-l
Bendera menetapkan$\
variabel untuk memiliki nilai dengan kode oktal0141
(karakter ASCIIa
). Danl141
lebih pendek dari$\="a";
.Pyth, 38 byte
Coba di sini!
Saya berharap ini mudah golf.
sumber
JavaScript (ES6), 114 byte
sumber