TLDR;Слишком широкий.
Как уже упоминалось @tarkmeper, у кубика Рубика огромное количество комбинаций.
Простой алгоритм перетасовки не даст вам ответа.Я бы предложил вам создать алгоритмы, которые решают куб, основываясь на его начальном состоянии.Когда я решаю куб самостоятельно, есть 2 основных метода:
1.Решите куб слой за слоем, что является методом новичка https://www.youtube.com/watch?v=MaltgJGz-dU
2. CFOP (Cross F2l (первые 2 слоя) OLL PLL (все алгоритмы),
https://www.youtube.com/watch?v=WzE7SyDB8vA (довольно продвинутый)
Были разработаны машины для решения куба, но они принимают входные данные в виде изображений куба.
Я думаю, что реализация CFOP могла бы на самом деле решить вашу проблему, поскольку она не проверяет случайные тасовки куба, а фактическирешает это систематически, но это будет очень сложно.
Для вашей реализации было бы намного лучше взять данные в виде матрицы.
Кубик Рубика состоит из 3 частей: 1. Центр (1 цвет) 2Край (2 цвета) 3. Угол (3 цвета)
Есть 6 центров, 12 углов и 8 углов.Вам также нужно будет принять во внимание действительные начальные состояния, поскольку вы не можете рандомизировать его.
Что я мог бы подумать сейчас о проблеме такого масштаба, так это создать 4 алгоритма:
Cross():
.... which takes the cube and makes the cross which is basically all white edges
aligned to white center and their 2nd colored center.
F2L():
.... to make 2nd layers of the cube with the corner pieces of the first layer,
this could use backtracking as there are lot of invalid case occurences
OLL():
.... based on your state of cube after F2L transformation there is a straight
forward set of moves, Same for PLL():
Начало работыголые кости самого куба:
Вам также понадобится выполнить шаги, которые представляют собой F, F ', R, R', L, L ', B, B'.
Это движения на кубете, что с "'" означают перемещение этой грани в направлении против часовой стрелки относительно текущей грани куба, на который вы смотрите.
Представьте, что вы держите куб, F - вперед по часовой стрелке, R - вправо по часовой стрелке, Lслева по часовой стрелке, B назад по часовой стрелке.