MixFon / Rubik

В данном проекте необходимо написать программу, собирающую Кубик Рубика.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Rubik

В данном проекте необходимо написать программу, собирающую Кубик Рубика.

На вход программе подается последовательность поворотов граней, которые запутывают кубик. Программа выдает последовательность поворотов граней, которые приведут к собранному состоянию кубика.

Использование

Консольная версия

Для работы с консольной версией небходимо:

  1. Клонировать ветку main
  2. Перейти в папку с исходным кодом
  3. Собрать проект (make)
  4. Запустить программу, в качестве параметра передать строку с последовательностью поворотов граней.

    git clone https://github.com/MixFon/Rubik.git
    cd Rubik
    make
    ./rubik_cube "F R U R R U"
    --> F L' L' R2 D U' L' L' U ...

Графическая версия

Для работы с графической версией необходимо:

  1. Клонировать ветку main
  2. Перейти в папку с исходным кодом
  3. Открыть файл проекта UIRubik.xcodeproj в XCode

    git clone https://github.com/MixFon/Rubik.git
    cd Rubik
    open UIRubik.xcodeproj

Используемые модели

В проекте для представления кубика были использованы две модели:

  1. Массив матриц 3x3
  2. Матрица 3x3x3

В массиве матриц в каждой матрице хранится цвет. Данный массив используется для поиска решения.

В трехмерной матрице содержатся номена от 0 до 26. Данная матрица используется для представления кубика в 3D.

Массив матриц 3x3 Матрица 3x3x3
array matrix array

Решение головоломки

Алгоритм

Для сборки головоломки используется алгоритм "человеческой" сборки, который разделяется на этапов:

  1. Правильный крест
  2. Углы первого слоя
  3. Рёбра среднего слоя
  4. Крест последнего слоя
  5. Правильный крест в последнем слое
  6. Расстановка углов последнего слоя
  7. Разворот углов третьего слоя.

Более подробно про данный алгоритм можно ознакомиться тут

Автоматическая сборка

После нажатия на кнопку Solution появится последовательность поворотов, которая приведет к решению кубика. Для автоматической сборки кубика нужно зажать кнопку Q, для прокрутки назад нужно зажать W. Кнопка Generate генерирует случайную последовательность поворотов. Solution

Самостоятельная сборка

Собирать кубик можно самостоятельно, нажимая соответствующие символы на клавиатуре:

Грань Символ Демо
F (Front) Z F
F' (Front) X F'
L (Left) A L
L' (Left) S L'
R (Right) L R
R' (Right) ; R'
B (Back) C B
B' (Back) V B'
U (Up) D U
U' (Up) F U'
D (Down) J D
D' (Down) K D'

Одинарная кавычка обозначает вращение грани против часовой стрелки. (F' L' R' B' U' D')

Цифра 2 обозначает двойное вращение грани по часовой стрелке. (F2 L2 R2 B2 U2 D2)

About

В данном проекте необходимо написать программу, собирающую Кубик Рубика.


Languages

Language:Swift 98.3%Language:Makefile 1.7%