Reto
Dada una imagen ráster de color * con el mismo ancho y alto, genera la imagen transformada bajo el mapa del gato de Arnold . (* detalles ver abajo)
Definición
Dado el tamaño de la imagen N, suponemos que las coordenadas de un píxel se dan como números entre 0y N-1.
El mapa del gato de Arnold se define de la siguiente manera:
Se [x,y]mueve un píxel en las coordenadas [(2*x + y) mod N, (x + y) mod N].
Esto no es más que una transformación lineal en el toro: la parte amarilla, violeta y verde se mapea de nuevo en el cuadrado inicial debido a mod N.
Este mapa (llamémoslo f) tiene las siguientes propiedades:
Es biyectivo , eso significa reversible: es una transformación lineal con la matriz
[[2,1],[1,1]]. Como tiene determinante1y solo tiene entradas enteras, el inverso también tiene solo entradas enteras y está dado por[[1,-1],[-1,2]], esto significa que también es biyectivo en coordenadas enteras.Es un elemento de torsión del grupo de mapas biyectivos de
N x Nimágenes, lo que significa que si lo aplica muchas veces, recuperará la imagen original:f(f(...f(x)...)) = xla cantidad de veces que el mapa aplicado a sí mismo da como resultado la identidad será menor. o igual a3*N. A continuación, puede ver la imagen de un gato después de un número determinado de aplicaciones iteradas del mapa del gato de Arnold , y una animación de cómo se ve una aplicación repetida:

Detalles
Su programa no necesariamente tiene que lidiar con imágenes, pero también son aceptables matrices / matrices 2D, cadenas o estructuras 2D similares.
No importa si su
(0,0)punto está en la parte inferior izquierda o en la parte superior izquierda. (O en cualquier otro rincón, si esto es más conveniente en su idioma). Especifique qué convención utiliza en su envío.
Casos de prueba
En forma de matriz ( [1,2,3,4]es la fila superior, 1tiene índice (0,0), 2tiene índice (1,0), 5tiene índice (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
Como imagen (abajo a la izquierda (0,0)):

