Программа 5: движения + инварианты + Exact Cover
Программа перебирает не раскраски клеток, а наборы движений между равными частями. Большинство наборов отбрасывается до рекурсии, а оставшаяся задача решается как точное покрытие.
Математические подробности
Фиксируется клетка базовой части. Каждое движение определяется одним из восьми положений и образом этой клетки. Для выбранных движений клетка x создаёт пакет {x,T₂(x),…,Tₖ(x)}.
Общая область. Если меньше n/k клеток имеют все необходимые различные образы внутри исходной фигуры, набор движений невозможен.
Цветовой фильтр. Используются периодические раскраски 2×2 и 3×3. Движения переставляют цвета. Для набора движений проверяется разрешимость необходимой линейной системы по модулям 2, 3 и 5.
Exact Cover. На каждом шаге выбирается ещё не покрытая клетка с наименьшим числом допустимых пакетов. Единственный пакет становится вынужденным. Безуспешные остаточные состояния запоминаются.
Симметрии. Наборы, переходящие друг в друга симметрией исходной фигуры, фиксирующей стартовую клетку, проверяются только один раз.