Виклик
Давши кольорове растрове зображення * з однаковою шириною та висотою, виведіть зображення, трансформоване під мапу кота Арнольда . (* деталі див. нижче)
Визначення
Враховуючи розмір зображення, Nми припускаємо, що координати пікселя задаються як числа між 0іN-1 .
Карта кота Арнольда визначається наступним чином:
Піксель за координатами [x,y]переміщений до [(2*x + y) mod N, (x + y) mod N].
Це не що інше, як лінійне перетворення на торі: жовта, фіолетова та зелена частина повертаються на початковий квадрат за рахунок mod N.
Ця карта (назвемо її f) має такі властивості:
Це бієктивне , що означає оборотне: це лінійне перетворення з матрицею
[[2,1],[1,1]]. Оскільки він має детермінант1і має лише цілі записи, обернений також має лише цілі записи і задається[[1,-1],[-1,2]], це означає, що він є бієктивним і для цілих координат.Це крутний елемент групи бієктивних карт
N x Nзображень, це означає, що якщо застосувати його достатньо багато разів, ви отримаєте оригінальне зображення назад:f(f(...f(x)...)) = xкількість разів, яку карта, застосована до себе, призводить до ідентичності, гарантовано буде меншою або дорівнює3*N. Далі ви можете побачити зображення кішки після заданої кількості ітераційних застосувань карти котів Арнольда та анімацію того, як виглядає повторна програма:

Деталі
Вашій програмі не обов'язково мати справу з зображеннями, але 2D-масиви / матриці, рядки або подібні 2D-структури теж прийнятні.
Не має значення, чи ваша
(0,0)точка знаходиться внизу зліва або вгорі зліва. (Або в будь-якому іншому куточку, якщо це зручніше для вашої мови.) Будь ласка, вкажіть, яку умову ви використовуєте у своєму поданні.
Тестові шафи
У матричній формі ( [1,2,3,4]це верхній рядок, 1має індекс (0,0), 2має індекс (1,0), 5має індекс (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
Як зображення (зліва внизу (0,0)):

