Подскажите, как можно записать алгоритм вращения сторон кубика Рубика, используя теорию множеств.
У кубика есть два типа множеств - квадратов и действий, вот список:
Квадраты
угловой (24 шт) боковой (24 шт) центральный (6 шт)
Действия (для одной стороны)
сдвиг верхнего слоя сдвиг центрального слоя сдвиг нижнего слоя вращение активной стороны
Для четырех сторон, лежащих в одной плоскости, первые три действия не отличаются.
Так как у нас 3 таких группы по 4 стороны, количество действий = 9 (3 группы*3 слоя, инверсию не считаем)
Вопрос:
Как должен выглядеть оптимальный алгоритм вращения?
Изначально я записал правила в таблицу и по этим правилам переназначал цвета в таблице состояний кубика просто сдвигая параметр квадрата по петле.
Правила были примерно такие: {1,4,7}, {2,5,8}, {3,6,9}, {1,2,3,6,9,8,7}
Но где-то была ошибка с параллельным присваиванием и я, чтобы ускорить процесс, при помощи команды testforblock (кубик Рубика работает на командном блоке) записал все действия в таблицы, а таблицы вставил в код. Результат хоть и работает, но код режет глаза.