Tantangan
Diberi gambar raster warna * dengan lebar dan tinggi yang sama, menampilkan gambar yang diubah di bawah peta kucing Arnold . (* detail lihat di bawah)
Definisi
Mengingat ukuran gambar, N
kami mengasumsikan bahwa koordinat piksel diberikan sebagai angka antara 0
dan N-1
.
Peta kucing Arnold kemudian didefinisikan sebagai berikut:
Piksel pada koordinat [x,y]
dipindahkan ke [(2*x + y) mod N, (x + y) mod N]
.
Ini tidak lain adalah transformasi linear pada torus: Bagian kuning, ungu dan hijau dipetakan kembali ke kotak awal karena mod N
.
Peta ini (sebut saja f
) memiliki properti berikut:
Ini adalah kata sifat , itu berarti reversibel: Ini adalah transformasi linear dengan matriks
[[2,1],[1,1]]
. Karena memiliki determinan1
dan dan hanya memiliki entri bilangan bulat, kebalikannya juga hanya memiliki entri bilangan bulat dan diberikan oleh[[1,-1],[-1,2]]
, ini berarti ia juga bijektif pada koordinat bilangan bulat.Ini adalah elemen puntir dari kelompok peta bijektif
N x N
gambar, yang berarti jika Anda menerapkannya berkali-kali, Anda akan mendapatkan gambar asli kembali:f(f(...f(x)...)) = x
Jumlah kali peta diterapkan untuk dirinya sendiri menghasilkan identitas dijamin kurang atau sama dengan3*N
. Berikut ini Anda dapat melihat gambar kucing setelah sejumlah aplikasi iterated dari peta kucing Arnold , dan animasi seperti apa aplikasi yang berulang itu terlihat:
Detail
Program Anda tidak harus berurusan dengan gambar, tetapi 2D-array / matriks, string atau struktur 2D serupa juga dapat diterima.
Tidak masalah apakah
(0,0)
titik Anda ada di kiri bawah atau di kiri atas. (Atau di sudut lain, jika ini lebih nyaman dalam bahasa Anda.) Silakan tentukan konvensi apa yang Anda gunakan dalam kiriman Anda.
Testcases
Dalam bentuk matriks ( [1,2,3,4]
adalah baris teratas, 1
memiliki indeks (0,0)
, 2
memiliki indeks (1,0)
, 5
memiliki indeks (0,1)
)
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
maps to:
1 14 11 8
12 5 2 15
3 16 9 6
10 7 4 13
--------------------
1 2 3
4 5 6
7 8 9
map to:
1 8 6
9 4 2
5 3 7
Seperti gambar (kiri bawah adalah (0,0)
):