Saya suka Hilbert Curve .
Tugas Anda untuk tantangan ini adalah untuk mengambil gambar (hanya gambar persegi di mana semua sisi memiliki kekuatan dua piksel lebar) dan menguraikannya baris demi baris dengan cara zig-zagging dan putar kembali ke atas dalam kurva pseudo-Hilbert .
Terurai
Untuk mengurai Anda akan mulai dengan pixel di sudut kiri atas dan bergerak ke kanan sampai Anda tiba di tepi gambar. Setelah Anda menyentuh tepi gambar, Anda akan bergerak ke bawah ke baris berikutnya dan mulai bepergian ke kiri sampai Anda menyentuh tepi lagi. Anda akan melanjutkan mengurai baris demi baris dengan berpindah arah setiap kali sehingga Anda mendapatkan satu kurva kontinu. Ini akan terlihat seperti permainan ular yang dimainkan dengan baik
Hasil penguraian harus berupa urutan piksel yang mencakup setiap piksel tepat satu kali
Reraveling
Setelah Anda memesan piksel, Anda akan mengatur ulang piksel tersebut pada kanvas berukuran sama baru mengikuti jalur kurva pseudo-Hilbert. Untuk 2**n
gambar persegi berukuran Anda harus menggunakan iterasi ke-n dari kurva pseudo-hilbert. Setiap piksel akan ditempatkan tepat di satu tempat di kanvas baru. Anda harus memutar ulang gambar sehingga titik yang semula di kiri atas (awal kurva ular kami) akan tetap ada dan titik di kanan bawah (ujung kurva ular kami) akan ditempatkan di kanan atas.
I / O
Program atau fungsi Anda harus mengambil gambar dari batasan yang ditentukan melalui metode standar dan menghasilkan gambar lain melalui metode standar.
Mencetak gol
Ini adalah program kode-golf dengan kemenangan byte paling sedikit.
Contohnya
Memasukkan
Keluaran
Memasukkan
Keluaran
Memasukkan
Keluaran
Saya juga merekomendasikan pengujian pada gambar warna putih atau padat kosong untuk memastikan Anda tidak kehilangan piksel.
Jangan ragu untuk memasukkan hasil Anda sendiri dalam jawaban Anda!
sumber
Jawaban:
Mathematica,
286273 byteFiuh! Menantang tapi menyenangkan!
Penjelasan
Konversikan
Image
menjadi array nilai RGB.Menghasilkan
l
olehl
array dengan kepala1
, di manal
adalah panjang input (yaitu lebar gambar).Hasil ini
{{1[1, 1], 1[1, 2], ..., 1[1, L]}, {1[2, 1], ..., 1[2, L]}, ..., {1[L, 1], ..., 1[L, L]}}
(l
ditulis dalam huruf kapital untuk mengurangi kebingungan)Sebuah
StringReplace
fungsi yang menggantikan setiap"L"
dengan"+RF-LFL-FR+"
dan"R"
dengan"-LF+RFR+FL-"
Terapkan
StringReplace
fungsi keString
"L"
,Log2[l]
kali.Konversi hasilnya
String
menjadiList
karakter.Fungsi tanpa nama yang:
"-"
, gandakan elemen kedua dari input pertama denganI
."+"
, bagi elemen kedua dari input pertama olehI
."F"
, tambah input pertama denganReIm
(memisahkan bagian input nyata dan imajiner) dari input kedua.Dimulai dengan
{{1,1},I}
, secara kumulatif menerapkan fungsi tanpa nama di atas, menggunakan setiap elemenList
karakter sebagai input kedua. Kode ini menghasilkan output dari semua iterasi.Singkirkan elemen kedua dari masing-masing
List
dan hapus duplikat. (Langkah-langkah hingga titik ini menghasilkanList
koordinat dari kurva Hilbert)Lepaskan susunan input RGB (membalikkan setiap baris dan ratakan).
Buat
Rule
objek, sehingga elemen pertama dalam input pertama (koordinat kurva Hilbert) dipasangkan dengan elemen pertama dari input kedua (gambar tidak terurai), elemen kedua dengan input kedua, dan seterusnya.Terapkan penggantian
Rule
itu ke dariArray
dari langkah kedua.Konversi ke array nilai RGB menjadi
Image
.Contoh masuk / keluar
Memasukkan:
Keluaran:
Memasukkan:
Keluaran:
Fungsi terbalik (
266253 byte)sumber
Oktaf 234 Bytes
Nama file gambar input dan output harus disediakan dari input standar. ukuran kode tanpa input / output adalah 194 byte .
Penjelasan:
Pola dasar indeks adalah:
Dalam setiap iterasi, 4 salinan dari hasil iterasi sebelumnya dibuat dan beberapa transformasi diterapkan untuk setiap salinan kemudian semua blok disatukan untuk membentuk hasil saat ini.
jadi kita punya:
Indeks Hilbert diurutkan dan indeks elemen yang diurutkan dikembalikan:
Mengurai diterapkan membalik semua baris genap:
Reraveling diterapkan:
-S repetisi untuk setiap saluran
-permutasi diterapkan karena dalam oktaf data diatur kolom
Contoh gambar:
sumber