Девять цветных плиток на грани куба Рубика – это уже мозаика. Из девяти квадратов шести цветов можно собрать более 10 миллионов комбинаций разрешением 3х3 пикселя. Для каждой такой комбинации можно физически путем вращения граней собрать зеркальный паттерн в инверсивных цветах на противоположной стороне кубика (об этом я подробно рассказывал в статье о двусторонних паттернах и MDSI-методе). А если кубиков 4, 10, 100 или больше, то разрешение изображения становится всё выше, а мозаика всё выразительней. А используя MDSI-метод любую мозаику можно превратить в двустороннюю – подобно жаккардовой ткани, где изнаночная сторона является инверсией лицевой.
В этой статье я рассказываю, как начать эксперименты с простыми двусторонними мозаиками, где паттерн на кубике Рубика ограничивается двумя парами инверсивных цветов.
Определение структуры двухцветных двусторонних паттернов
В одной из моих предыдущих публикаций мы решали «Задачу о паттернах», где вывели формулы, согласно которой число уникальных паттернов, содержащих не более двух цветов на одной стороне кубика Рубика составляет 140 комбинаций. Число их невелико, поэтому свои эксперименты по созданию системы сборки полноценных MDSI-паттернов я начинал с простых двухцветных, которых, впрочем, вполне достаточно, чтобы создавать довольно интересные мозаики.

На первом этапе проанализируем варианты возможных паттернов. Расположение цветов на гранях классического кубика Рубика позволяет разделить сочетания цветов на два типа: смежные и противоположные. Например, зеленый и красный цвета являются смежными, поскольку зеленая и красная грани на кубике – соседние, у них есть общее красно-зеленое ребро, а также два угла, на которых присутствуют оба цвета. А вот другая пара – зеленый и синий – пара противоположных цветов. Такие грани не имеют общих элементов, они противоположные, соответственно и цвета будут противоположными. Существует 15 вариантов сочетания цветов: 12 для смежных (рис. 2а) и 3 для противоположных (рис. 2б). Это типология важна для разрабатываемой системы сборки, поскольку для каждого из двух типов сочетаний будет свой набор алгоритмов.

Особенностью двухцветных паттернов является возможность поделить их на две равные группы, поскольку пары паттернов каждой пары цветов (пример на рис. 3) с точки зрения алгоритма сборки будут подобными.

Существует 70 двухцветных паттернов (рис. 4), где каждому паттерну будет соответствовать подобный, где цвета меняются метами. Соответственно, для двухцветных паттернов потребуется найти не 140, а 70 алгоритмов сборки.
Однако, не все подобные паттерны будут иметь подобные алгоритмы, например, для двух пар подобных двухцветных паттернов, приведенных на рис. 5, алгоритмы будут разными. На рисунке видно, что пара белый-красный – это пара смежных цветов, а пара белый-желтый – противоположных. Для паттернов противоположных цветов и паттернов смежных цветов требуются разные наборы алгоритмов, поскольку симметрия куба не позволит собирать эти паттерны одинаковыми способами.


Таким образом, для разработки системы необходимо сконструировать 70´2 = 140 решений (алгоритмов). Если учитывать, что каждое из 70 множеств включает по одному нулевому паттерну – собранную грань каждого из двух цветов, то алгоритмов потребуется 138: по 69 для каждой из групп паттернов: смежных и противоположных цветов соответственно.
Поиск алгоритмов сборки
Алгоритм сборки кубика Рубика – это последовательность вращений (ходов) кубика, записанная специальным языком. Нотацию вращений сформулировал Дэвид Сингмастер в 1981 году.
Язык вращений куба – первое, что осваивает человек, начавший изучать теорию сборки кубика Рубика.
Для каждого вращения существует свое буквенное обозначение:
F (Front) – фронтальная (передняя) грань по часовой стрелке.
B (Back) – задняя грань по часовой стрелке.
R (Right) – правая грань по часовой стрелке.
L (Left) – левая грань по часовой стрелке.
U (Up) – верхняя грань по часовой стрелке.
D (Down) – нижняя грань по часовой стрелке.
Чтобы записать движение против часовой стрелки, нужно добавить штрих «’», например F’. Чтобы записать двойное движение грани (на 180°), нужно добавить «2» после буквы, например U2. Визуальная схема нотации представлена на рис. 6.

Например, запись алгоритма «T-perm», одного из популярных алгоритмов сборки кубика Рубика по методу скоростной сборки CFOP Джессики Фридрих, выглядит следующим образом:
R U R' U' R' F R2 U' R' U' R U R' F'.
Нотация Сингмастера будет применена в дальнейшем при записи алгоритмов сборки двусторонних паттернов.
Для поиска алгоритмов я использовал онлайн-решатель Rubik's Cube Solver, который также интегрирован на платформу RuWix. Решатель работает на основе открытой библиотеки алгоритмов Коцембы (Kociemba). Я задавал параметры каждого паттерна вручную. Программа генерировала алгоритм для сборки из паттерна в собранный куб. Затем через инверсию алгоритма я получал итоговый субоптимальный вариант алгоритма, состоящий в среднем из 20 ходов. Получился лист из 138 формул: по 69 формул для каждого типа паттерна. Примеры формул представлены на рис. 7.

Оптимизация подобных пар и два типа паттернов потребовали специального позиционирования куба перед началом сборки паттерна.
Чтобы воспользоваться алгоритмом для сборки паттерна со смежными цветами, необходимо определить «основной» (primarycolor) цвет. Основным является цвет, в который окрашен центральный элемент паттерна. Второй цвет – «дополнительный» (secondarycolor). Перед выполнением алгоритма нужно взять собранный кубик таким образом, чтобы его лицевая сторона (frontface) была основного цвета, а верхняя сторона (upface) – дополнительного. После правильного позиционирования кубика можно выполнять алгоритм (рис. 8).

Для сборки паттерна с противоположными цветами, также нужно определить основной цвет. Дополнительный цвет в этом случае всегда будет находиться на противоположной стороне. Таким образом, перед началом сборки кубик нужно позиционировать так, чтобы основной цвет был на лицевой стороне (рис. 9).

Первой двусторонней мозаикой, созданной по методу MDSI для двухцветных паттернов, стало мозаичное панно из 480 кубиков Рубика с пиксельной стилизацией исторического текстильного рисунка «Чикаго» (рис. 10), которое я собрал в феврале 2021 года в режиме реального времени на выставке «В кубе» в арт-пространстве NIMLOFT (г. Иваново). Позднее в том ж году мозаика стала центральным экспонатом выставки «Текстиль в кубе» в Музее ивановского ситца (Ивановский государственный историко-краеведческий музей имени Д.Г. Бурылина).

Методику сборки с набором формул я представил в руководстве по сборке двусторонних мозаик из кубиков Рубика, первую версию которой в 2021 году выпустила компания Rubik’s.
В 2022 году моя методика заинтересовала американского программиста Томаса Рокицки, известного как одного из авторов доказательства «числа Бога», разработчика (вместе с Гербертом Коцембой) эффективных алгоритмов решения кубика Рубика. Томас предложил оптимизировать алгоритмы сборки с помощью собственных машинных мощностей и специализированного решателя Twizzle Explorer. После оптимизации алгоритмы были сокращены в 2-3 раза в среднем до 7-8 ходов. Пример оптимизации приведен на рис. 11.

Вторая версия руководства по сборке двухцветных MDSI-паттернов «You can create dual-sided Rubik’s cube mosaics» с оптимизированными алгоритмами вышла в 2023 году. Скачивайте и пробуйте собирать двусторонние паттерны.
Программная реализация метода MDSI
Для удобства сборки мозаик я занялся программной реализации. Генерация алгоритмов была решена через telegram-бот Rubik’s Mosaic Solver, как наиболее удобный способ поиска паттернов без списка алгоритмов под рукой. Интерактивный Telegram-бот позволяет пользователям легко находить алгоритмы для двухцветных паттернов на кубике Рубика, с визуальной и текстовой формой ввода, обработкой и выводом решения.
Функциональность бота:
1. Получает ввод от пользователя. Пользователь может ввести шаблон паттерна двумя способами:
через кнопки-эмодзи с цветами (визуально);
текстом – строкой из 9 букв (например, RRWRWRRRR), где каждая буква обозначает цвет: W – белый, Y – желтый, R – красный, O – оранжевый, B – синий, G – зеленый.
2. Проводит валидацию паттерна. Проверяет, что ввод состоит ровно из 9 символов и содержит только допустимые цвета (W, Y, R, O, B, G).
3. Сопоставляет паттерн с базой. Загружает Excel-файл, содержащий кодировку паттернов и алгоритмы.
Вычисляет:
основной и дополнительный цвета паттерна;
тип паттерна – смежные или противоположные цвета.
Сравнивает закодированный паттерн с базой и возвращает:
алгоритм сборки (в стандартной нотации Сингмастера);
инструкцию по позиционированию кубика Рубика.
4. Выводит ответ.
Отображает паттерн визуально (через эмодзи);
Показывает тип паттерна, основной и дополнительный цвета, инструкцию по позиционированию, алгоритм сборки.

Примеры простых двусторонних мозаик
Вы можете экспериментировать с любыми пиксельными паттернами в цветах кубика Рубика и создавать собственные двусторонние мозаики, используя алгоритмы из руководства или Telegram-бота. . Начните с простых двухцветных (в одной из своих следующих публикаций на Хабре я расскажу о программной реализации метода для создания полноцветных двусторонних мозаик).
Далее приведены примеры из моего руководства с простыми двусторонними мозаиками для разного количества кубов Рубика от 4 до 100. Пробуйте. И пусть всё сложится!








Astins
Благодарю за интересный материал
academicmaslow Автор
Спасибо!