Здесь вы можете найти документ ACM, в котором описаны альтернативы представления кубика Рубика.
Когда я делал кубик Рубика в Ruby, у меня было мало времени и я решил сам по себе закодировать логику. Он работает довольно хорошо для куба 3 × 3 × 3, но реализация очень плохая.
gist.github.com / 377665
Я использовал следующую матрицу для представления куба в памяти:
spreadsheets.google.com / ссс? Ключ = 0As1DrYDLh7F6dGROZFRoOTFDOThVMUFENjRWM0xJbVE & гл = еп
Я изложил набор правил для смещений строк или столбцов и поворотов для внешних сторон для определенных перемещений. Я поместил эти правила как листья в дерево. Узлы более высокого уровня этого дерева были ориентирами для типов перемещения, направлений и номеров строк или столбцов. Для конкретной ситуации я извлекал соответствующий набор правил для преобразования двумерного массива, представляющего кубик Рубика, и затем выполнял их одно за другим.
Вот исходный файл на Ruby (предупреждение о жутком коде!):
github.com / токсаитов / сценарий / блоб / мастер / lib / сценарий / объекты / rubik.rb
Пожалуйста, рассмотрите возможность проверки класса RubikStructure
, хеша RubikStructure::RULES
и метода RubikStructure#rotate
.
Надеюсь, это поможет как-то.