Terinspirasi oleh pertanyaan ini
Cara lain untuk membuka gulungan gambar 2D menjadi string 1D adalah dengan menggunakan Hilbert Curve.
Ada banyak versi kurva ini, tergantung pada jumlah iterasi yang digunakan saat menghitungnya. Berikut ini contoh Curves Hilbert dari urutan pertama hingga urutan kelima.
Cara menghitung kurva ini adalah sebagai berikut. Pertama kita mendefinisikan urutan pertama Hilbert Curve sebagai yang ditunjukkan pada gambar (satu untuk n = 1), sehingga cocok dalam 1x1 kotak. Kami kemudian membuat empat salinan kurva ini, menempatkannya dalam bujur sangkar 4x4, sehingga semuanya menyajikan "cekungan" ke arah sisi kiri. Kami kemudian membalik dua kurva urutan paling kiri 1, sehingga bagian atas cekung menghadap ke atas, sedangkan bagian bawah menghadap ke bawah. Kami akhirnya menghubungkan sudut-sudut Kurva Hilbert yang berdekatan. Jika ingin mendapatkan Kurva orde (n +1), kita hanya perlu mengulangi proses dengan empat Kurva n-order. Kita dapat melihat visualisasi proses di sini (saya juga akan menambahkan gambar yang merinci prosesnya segera)
Tugas Anda dalam tantangan ini adalah membuka gulungan matriks bilangan bulat di sepanjang urutan terendah Hilbert Curve untuk matriks itu.
Demi kesederhanaan, kita akan memiliki kurva mulai dari sudut kiri atas matriks.
Anda dapat menerima input baik sebagai daftar daftar bilangan bulat, di mana setiap sub-daftar mewakili baris matriks.
Anda dapat mengasumsikan bahwa input akan berupa matriks kuadrat (n * n).
Sebagai contoh:
Memasukkan:
[[ 1, 2,]
[ 3, 4 ]]
Keluaran:
[ 1, 2, 4, 3 ]
Karena kita menggunakan urutan pertama Hilbert Curve yang ditunjukkan pada gambar
Memasukkan:
[[ 1, 2, 3, 4, ]
[ 5, 6, 7, 8, ]
[ 9, 10, 11, 12, ]
[ 13, 14, 15, 16 ]]
Keluaran:
[ 1, 5, 6, 2, 3, 4, 8, 7, 11, 12, 16, 15, 14, 10, 9, 13 ]
Menggunakan urutan kedua Hilbert Curve
Seperti biasa, celah standar tidak diizinkan.
Ini adalah kode-golf, jadi jawaban tersingkat dalam byte menang.