Bu sorudan ilham alındı
Bir 2D görüntüyü 1D dizesine açmak için başka bir yol Hilbert Curve kullanmaktır .
Hesaplarken kullanılan yineleme sayısına bağlı olarak, bu eğrinin birçok sürümü vardır. Aşağıda Hilbert Curves örneğini birinci dereceden beşinci dereceye kadar takip edin.
Bu eğriyi hesaplamanın yolu şudur. İlk olarak Hilbert Curve ilk sırasını 1x1 kareye sığacak şekilde şekilde gösterildiği gibi (n = 1 için olan) olarak tanımlarız. Bu eğrinin dört kopyasını, 4x4 kareye yerleştirerek, sol tarafa doğru "içbükeyliği" sunacak şekilde kopyalarız. Daha sonra en soldaki iki sıra 1 eğrisini ters çeviririz, böylece üstteki içbükeylik üste, alt kısım alttan aşağı bakar. Sonunda bitişik Hilbert Eğrilerinin köşelerini birleştiriyoruz. Eğer (n + 1) -düzeyli bir Eğri elde etmek istiyorsanız, işlemi sadece dört n-dereceli Eğri ile tekrarlamamız gerekir. Biz sürecin bir görselleştirme görebilirsiniz burada (yakında ben de süreci ayrıntılı olarak gösteren bir görüntü katacak)
Bu görevdeki göreviniz, bu matris için en düşük sıralı Hilbert Curve boyunca bir tamsayı matrisini açmaktır .
Basitlik adına, matrisin sol üst köşesinden başlayan eğriye sahip olacağız.
Girdiyi, her bir alt listenin matrisin bir satırını temsil ettiği tamsayıların bir listesi olarak alabilirsiniz.
Girişin bir kare matris (n * n) olacağını varsayabilirsiniz.
Örneğin:
Giriş:
[[ 1, 2,]
[ 3, 4 ]]
Çıktı:
[ 1, 2, 4, 3 ]
Şekilde gösterilen birinci dereceden Hilbert Curve kullandığımız için
Giriş:
[[ 1, 2, 3, 4, ]
[ 5, 6, 7, 8, ]
[ 9, 10, 11, 12, ]
[ 13, 14, 15, 16 ]]
Çıktı:
[ 1, 5, 6, 2, 3, 4, 8, 7, 11, 12, 16, 15, 14, 10, 9, 13 ]
İkinci dereceden Hilbert Curve kullanımı
Her zamanki gibi standart boşluklara izin verilmez.
Bu kod golf, bu yüzden bayttaki en kısa cevap kazanır.