Кубик Рубика
Aug. 9th, 2015 08:05 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Когда-то я прочитал, как его собирать, выучил последовательность шагов и пару дней радовался, что получается. Потом всё забылось. Недавно кубик Рубика опять попался мне в руки и любопытство вместе с самолюбием заставили искать разгадку уже своими силами. Всё-таки алгебраическая игрушка, каждый поворот вращает угловые, переставляет боковые (срединные) кубики. Можно найти преобразования, которые не будут трогать боковые, но переставят угловые. Пришлось, конечно, взять листик и ручку и постепенно решение стало вырисовываться.
Насчёт боковых, это я, признаться, помнил с прошлого, что главное их на место поставить, а потом углы передвигать. Расставить на места боковые кубики нетрудно. Будем смотреть на кубик с какой-то одной грани, остальные грани обозначим по их расположению: U - верхняя, R - правая, D - нижняя, L - левая. Грань, которая к нам лицом - F. На верхнюю грань просто поднимаем все её боковые (см. анимацию). На грани, которые сбоку, поднимаем как-бы экскаватором. Поворачиваем, например, грань F левой стороной вниз, подводим снизу нужную боковую, поворачиваем обратно. Заметим, что на верхней грани при этом ничего не нарушается. Последнее место оставим для манипуляций с нижними боковыми. На нижней грани не пытаемся их выставить в правильной последовательности, главное -- чтобы они смотрели нужным цветом вниз. Вот пример, как это должно происходить.
Теперь мы подходим к основной идее -- как двигать угловые кубики, не затрагивая при этом боковых на верхней и с боков. На нижней пусть перемешиваются, но примыкают правильным цветом к центру. Все повороты грани по часовой стрелке обозначаются просто буквой грани, например R. При повороте против часовой, добавляем к букве апостроф, например D'. Если двойной поворот, то D2 или D2', смотря что наглядней. Итак, вот движение, которым двигается угловой кубик (по ссылке анимация):
R' D' R D2 R' D' R (обозначим это движение A)
Белый кубик с верхней грани уезжает на боковую вниз, на его место поднимается левый нижний.

Теперь поднимем этот кубик обратно, но уже другим путём:
F D F' D2' F D F' (пусть будет движение B)
Таким образом можно поднять все угловые на верхнюю грань (пример). Небольшая проблема, если кубик уже на месте, но неправильно ориентирован. Тогда, повёрнутый вправо кубик опускаем движением A, повёрнутый влево движением B.
Если выполнить последовательно A и B, то такое движение я называю R.
R = R' D' R D2 R' D' R F D F' D2' F D F'
R не затрагивает верхнюю грань, но производит перемещения на нижней. Зеркальные манипуляции слева я называю L. Выпишу их для сравнения:
L = L D L' D2' L D L' F' D' F D2 F' D' F
То же самое, что и R, только L заменяем на R, а штрихи везде убираем или добавляем.
Теперь о том, какой эффект оказывает движение R. Основной -- вращает нижний треугольник из боковых на нижней грани по часовой.

Соответственно L вращает их в обратную сторону, а значит с помощью этих движений мы можем расставить правильно боковые на нижней грани. Теперь об угловых кубиках снизу. Сделав два движения подряд, RL, мы не затронем боковые, но правый верхний треугольник из угловых повернём против часовой стрелки, а угловые кубики в этом треугольнике повернутся по часовой.

Левый нижний угловой кубик останется на месте. Сделав LR мы правый нижний угловой оставим на месте, а левый верхний треугольник повернём вправо (т.е. по часовой), с поворотом кубиков в нём против часовой.
Несколько движений LR и RL и все кубики на нижней грани будут на своих местах, а если повезёт, то и правильно ориентированы. Если же нет, то на сцену выходят два удивительно коротких движения:
R2 = R' D2' R D R' D R
L2 = L D2 L' D' L D' L'
Выполнив их парой R2L2, мы вращаем на нижней грани правый верхний кубик по часовой стрелке, а правый нижний -- против.

Таким образом у нас есть всё, чтобы кубик Рубика был полностью собран. Пример с последней гранью.
Теперь для любителей алгебры. Для каждого преобразования есть ему обратное, то есть разворачиваем нашу символьную цепочку и меняем в ней знаки на противоположные. Скажем научно, для морфизма RL обратным ему будет L-1R-1. Это полезно там, где надо вращать 2 раза в одну сторону. Вместо этого можно обратным движением повернуть 1 раз в противоположную.
UPD Нашёл новое преобразование:
R2R = R' D2' R D' R' D' R F D F' D2' F D F'
Переставляет угловые в обратную сторону, чем RL, но короче. RLR2R вращает два угловых на диагонали. Обратное к R2R:
R-1R2-1 = F D' F' D2 F D' F' R' D R D R' D2 R
Насчёт боковых, это я, признаться, помнил с прошлого, что главное их на место поставить, а потом углы передвигать. Расставить на места боковые кубики нетрудно. Будем смотреть на кубик с какой-то одной грани, остальные грани обозначим по их расположению: U - верхняя, R - правая, D - нижняя, L - левая. Грань, которая к нам лицом - F. На верхнюю грань просто поднимаем все её боковые (см. анимацию). На грани, которые сбоку, поднимаем как-бы экскаватором. Поворачиваем, например, грань F левой стороной вниз, подводим снизу нужную боковую, поворачиваем обратно. Заметим, что на верхней грани при этом ничего не нарушается. Последнее место оставим для манипуляций с нижними боковыми. На нижней грани не пытаемся их выставить в правильной последовательности, главное -- чтобы они смотрели нужным цветом вниз. Вот пример, как это должно происходить.
Теперь мы подходим к основной идее -- как двигать угловые кубики, не затрагивая при этом боковых на верхней и с боков. На нижней пусть перемешиваются, но примыкают правильным цветом к центру. Все повороты грани по часовой стрелке обозначаются просто буквой грани, например R. При повороте против часовой, добавляем к букве апостроф, например D'. Если двойной поворот, то D2 или D2', смотря что наглядней. Итак, вот движение, которым двигается угловой кубик (по ссылке анимация):
R' D' R D2 R' D' R (обозначим это движение A)
Белый кубик с верхней грани уезжает на боковую вниз, на его место поднимается левый нижний.

Теперь поднимем этот кубик обратно, но уже другим путём:
F D F' D2' F D F' (пусть будет движение B)
Таким образом можно поднять все угловые на верхнюю грань (пример). Небольшая проблема, если кубик уже на месте, но неправильно ориентирован. Тогда, повёрнутый вправо кубик опускаем движением A, повёрнутый влево движением B.
Если выполнить последовательно A и B, то такое движение я называю R.
R = R' D' R D2 R' D' R F D F' D2' F D F'
R не затрагивает верхнюю грань, но производит перемещения на нижней. Зеркальные манипуляции слева я называю L. Выпишу их для сравнения:
L = L D L' D2' L D L' F' D' F D2 F' D' F
То же самое, что и R, только L заменяем на R, а штрихи везде убираем или добавляем.
Теперь о том, какой эффект оказывает движение R. Основной -- вращает нижний треугольник из боковых на нижней грани по часовой.

Соответственно L вращает их в обратную сторону, а значит с помощью этих движений мы можем расставить правильно боковые на нижней грани. Теперь об угловых кубиках снизу. Сделав два движения подряд, RL, мы не затронем боковые, но правый верхний треугольник из угловых повернём против часовой стрелки, а угловые кубики в этом треугольнике повернутся по часовой.

Левый нижний угловой кубик останется на месте. Сделав LR мы правый нижний угловой оставим на месте, а левый верхний треугольник повернём вправо (т.е. по часовой), с поворотом кубиков в нём против часовой.
Несколько движений LR и RL и все кубики на нижней грани будут на своих местах, а если повезёт, то и правильно ориентированы. Если же нет, то на сцену выходят два удивительно коротких движения:
R2 = R' D2' R D R' D R
L2 = L D2 L' D' L D' L'
Выполнив их парой R2L2, мы вращаем на нижней грани правый верхний кубик по часовой стрелке, а правый нижний -- против.

Таким образом у нас есть всё, чтобы кубик Рубика был полностью собран. Пример с последней гранью.
Теперь для любителей алгебры. Для каждого преобразования есть ему обратное, то есть разворачиваем нашу символьную цепочку и меняем в ней знаки на противоположные. Скажем научно, для морфизма RL обратным ему будет L-1R-1. Это полезно там, где надо вращать 2 раза в одну сторону. Вместо этого можно обратным движением повернуть 1 раз в противоположную.
UPD Нашёл новое преобразование:
R2R = R' D2' R D' R' D' R F D F' D2' F D F'
Переставляет угловые в обратную сторону, чем RL, но короче. RLR2R вращает два угловых на диагонали. Обратное к R2R:
R-1R2-1 = F D' F' D2 F D' F' R' D R D R' D2 R
no subject
Date: 2015-08-09 05:34 am (UTC)Я делал по слоям; потом один алгебраист сказал мне, что ха, лучше с углов начинать; я нашел алгоритм, чтобы начинать с углов, с тех пор так и поступаю.
Но я видел всех этих чемпионов (за соседней партой сидели); это рехнуться как они, за спиной крутят, или вот сидит, правой рукой на клавке что-то программирует, а левой рукой кубик крутит. Смазывают их, чтобы плавно ходили.
no subject
Date: 2015-08-09 07:59 pm (UTC)Скорость же начинает повышаться, когда преобразования выучил, лёгкость хода выходит на первый план :)
За идею про углы спасибо.
no subject
Date: 2015-08-09 08:52 pm (UTC)А я как был чемпионом школы, так до сих пор и помню все ходы. Потом пробовал оптимизировать алгоритмы на Прологе, но вскоре забросил. Можешь попробовать на Хаскеле :)
Кстати, недавно видел интересный фокус: https://www.reddit.com/r/IAmA/comments/3d5wlc/hi_im_steven_brundage_the_magician_who_fooled/
no subject
Date: 2015-08-10 03:44 am (UTC)Ничего себе, ты аж чемпионом был. Я даже не помню, чтобы у меня в школе такие соревнования проводились.
no subject
Date: 2015-08-09 11:23 pm (UTC)https://youtu.be/YKijOP04fQU
no subject
Date: 2015-08-10 06:12 am (UTC)no subject
Date: 2015-08-10 06:33 am (UTC)no subject
Date: 2015-08-16 10:18 am (UTC)no subject
Date: 2015-08-10 08:14 am (UTC)Есть кубики с рисунками на гранях. И можно собрать кубик так, что все цвета на месте, но некоторые центральные кубики повёрнуты не так, как надо.
Например, можно из такого рисунка (на одной из граней):
^^^
^^^
^^^
сделать такой (остальные грани останутся как были):
^^^
^v^
^^^
или на двух соседних гранях можно сделать так:
^^^
^>^
^^^
no subject
Date: 2015-08-12 09:41 am (UTC)no subject
Date: 2015-08-10 08:20 am (UTC)Элемент DL имеет порядок 105 (то есть 105 раз нужно вращать "низ по часовой"-"лево по часовой", чтобы всё вернулось на свои места), а D'L — уже 63.
Разумеется, тут я имею в виду "классическую" группу вращений, которая нечувствительна к повороту центральных кубиков. Про "неклассическую", которая чувствительна, писал в предыдущем сообщении, и для неё порядки будут, соответственно, 420 и 252.