Пусть X - квадрат 4х4 бита, его будем одновременно считать целым числом 0..2^16-1
Пусть Rotate(X,A) - квадрат полученный из исходного вращением на А*90 градусов (пусть А от 0 до 3)
В общем вводим функцию I(X) от квадрата X, независимую от вращения этого квадрата:
I(X) = min(Rotate(X,A), по всем А от 0 до 3)
Очевидно, что упорядоченное по возрастанию множество значений Q этой функции имеет размер не менее 2^16/4. Кроме того Z из области значений I(X) тогда и только тогда, когда I(Z)=Z.
Теперь будем считать, что N(Y) - функция, возвращающая по Y из Q её порядковый номер среди Q.
Если у нас есть квадрат, то N(Y) можно рассчитать просто перебрав все квадраты меньше Y, проверяя на их принадлежность Q.
Если же у нас известны N(Y) с некоторым шагом (скажем с шагом 64), тогда мы сможем существенно быстрее выяснять номер своего квадрата, просто опускаясь не до нулевого элемента Q, а до ближайшего известного.