Meydan okuma
Aynı genişlik ve yüksekliğe sahip renkli bir raster görüntü * verildiğinde, Arnold'un kedi haritası altında dönüştürülen görüntüyü çıktılar . (* detaylar aşağıya bakınız)
Tanım
Görüntünün boyutu göz önüne alındığında N
bir pikselin koordinatları arasındaki sayılar olarak verilmiştir varsayalım 0
ve N-1
.
Arnold'un kedi haritası daha sonra şöyle tanımlanır:
Koordinatlardaki bir piksel [x,y]
taşındı [(2*x + y) mod N, (x + y) mod N]
.
Bu, torus üzerindeki doğrusal bir dönüşümden başka bir şey değildir: Sarı, menekşe ve yeşil kısım nedeniyle ilk kareye eşlenir mod N
.
Bu harita (hadi arayalım f
) aşağıdaki özelliklere sahiptir:
Bu bibekti , bu tersinir anlamına gelir: Matris ile doğrusal bir dönüşümdür
[[2,1],[1,1]]
. Belirleyici olduğu1
ve ve sadece tamsayı girişleri olduğu için, tersi de sadece tamsayı girişleri vardır ve[[1,-1],[-1,2]]
bu, tamsayı koordinatlarında bibektif olduğu anlamına gelir.Bu, görüntülerin bijective haritalar grubunun bir torsiyon elemanıdır
N x N
, yani, onu birçok kez yeterince uygularsanız, orijinal görüntüyü geri alırsınız:f(f(...f(x)...)) = x
Haritanın kimliğe verdiği sonuçların daha az olması garanti edilir veya eşittir3*N
. Aşağıda, Arnold'un kedi haritasının belirli bir yinelenen uygulamasından sonra bir kedinin görüntüsünü ve tekrarlanan bir uygulamanın neye benzediğini gösteren bir animasyon görebilirsiniz:
ayrıntılar
Programınız mutlaka görüntülerle uğraşmak zorunda değildir, ancak 2D dizileri / matrisleri, dizeleri veya benzer 2D yapıları da kabul edilebilir.
(0,0)
Amacınızın sol alt mı yoksa sol üst mi olduğu önemli değil . (Veya bu herhangi bir köşede, eğer sizin dilinizde daha uygunsa.) Lütfen gönderiminizde hangi kuralları kullandığınızı belirtin.
testcases
Matris formunda ( [1,2,3,4]
, üst sırada 1
indeksine sahiptir (0,0)
, 2
indeksine sahiptir (1,0)
, 5
indisine sahiptir (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
Resim olarak (sol altta (0,0)
):