Sfida
Data un'immagine raster a colori * con la stessa larghezza e altezza, produce l'immagine trasformata sotto la mappa del gatto di Arnold . (* dettagli vedi sotto)
Definizione
Data la dimensione dell'immagine N, supponiamo che le coordinate di un pixel siano indicate come numeri tra 0e N-1.
La mappa dei gatti di Arnold viene quindi definita come segue:
Un pixel alle coordinate [x,y]viene spostato in [(2*x + y) mod N, (x + y) mod N].
Questo non è altro che una trasformazione lineare sul toro: la parte gialla, viola e verde viene mappata sul quadrato iniziale a causa del mod N.
Questa mappa (chiamiamola f) ha le seguenti proprietà:
È biiettivo , ciò significa reversibile: è una trasformazione lineare con la matrice
[[2,1],[1,1]]. Poiché ha determinante1e ha solo voci intere, anche l'inverso ha solo voci intere ed è dato da[[1,-1],[-1,2]], ciò significa che è anche biiettivo su coordinate intere.È un elemento di torsione del gruppo di mappe biiettive di
N x Nimmagini, il che significa che se lo applichi abbastanza volte, otterrai di nuovo l'immagine originale:f(f(...f(x)...)) = xla quantità di volte in cui la mappa applicata a se stessa risulta nell'identità è garantita essere inferiore o uguale a3*N. Di seguito puoi vedere l'immagine di un gatto dopo un determinato numero di applicazioni iterate della mappa del gatto di Arnold e un'animazione di come appare un'applicazione ripetuta:

Dettagli
Il tuo programma non ha necessariamente a che fare con immagini, ma sono accettabili anche array / matrici 2D, stringhe o strutture 2D simili.
Non importa se il
(0,0)punto è in basso a sinistra o in alto a sinistra. (O in qualsiasi altro angolo, se è più conveniente nella tua lingua.) Specifica quale convenzione usi nella tua presentazione.
Casi test
In forma di matrice ( [1,2,3,4]è la riga superiore, 1ha indice (0,0), 2ha indice (1,0), 5ha indice (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
Come immagine (in basso a sinistra (0,0)):

