Skip to content

erstan/mono

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mono

One algorithm to rule them all!

The basic idea

If the parity is not disturbed during move execution, then the edge lattice and corner lattice can be solved separately without affecting each other. That is precisely what Cerb and Mono solvers are based on. They permute the edge peices and the corner peices in different stages without distrubing the rest of the cube. The algorithm is itself fairly simple. In fact, it is probably the closest one could get to an intuitive solve without having to learn multiple move sequences. This algorithm basically comes down to solving the entire cube by a series of swaps. It would be theoritically very easy(not neccessarily fast) to solve the cube using a single algorithm that can swap two peices without affecting the rest of the cube. But alas, such an algorithm does not exist because it is not possible to swap two cubelets on a Rubik's cube without disturbing the other peices. But, we have many algorithms that do something which closely resembles that. For instance, in PLL stage of CPOF, we have the following non-exhaustive list of standard algorithms -

  • U-Perms and A-Prems that cycle triplets of edge or corner peices in clockwise or counter clockwise directions
  • H-Perms, E-Perms and Z-Perms that swap two pairs of edge peices while keeping the rest of the cube intact
  • F-Perms, J-Perms, N-Perms, R-Perms, T-Perms, V-Perms and Y-Perms are the most interesting of the three classes because these algorithms swap a pair of edge peices and a pair of corner peices without altering any other cubelets. Any one of these algorithms can be used to completely solve a Rubik's cube by a series of appropriate swaps.

What's so special about Mono?

Mono Rubik's cube solver is an upgrade over the Cerb solver. Cerb solves the 3x cube in three stages - orientation of corner peices, permuation of corner peices and permutation of edge peices. Mono however combines the corner orientation and permuation steps, thereby making the implementation much simpler and also significantly decreasing the average number of moves in the generated solution.

Usage

Mono uses the same lettering scheme as the cerb solver. Create the edge (Path: EDGE_CONFIG_FILE_PATH) and corner (Path: CORNER_CONFIG_FILE_PATH) configuration files for your scrambled cube and invoke solution(EDGE_CONFIG_FILE_PATH, CORNER_CONFIG_FILE_PATH) function which returns the solution move sequence as a std::string

Tests

These tests were performed using the cerberus simulator.

Test (I)

StageCube StateMove Sequence
Scrambled CubeB2 D U2 L R2 B' U' R U R' U2 R' D2 R2 U D B' F' U' R2 D' B' F2 D B
Corners SolvedF F' U B' U2 F U' F' U2 F B U' F' D2 L' F F' U B' U2 F U' F' U2 F B U' F' L D2 L2 F2 F' U B' U2 F U' F' U2 F B U' F2 L2 D' L' F F' U B' U2 F U' F' U2 F B U' F' L D L2 F2 F' U B' U2 F U' F' U2 F B U' F2 L2
Edges SolvedF' U B' U2 F U' F' U2 F B U' E' L D M2 F' U B' U2 F U' F' U2 F B U' M2 D' L' E L D M2 F' U B' U2 F U' F' U2 F B U' M2 D' L' M F' U B' U2 F U' F' U2 F B U' M' D' M F' U B' U2 F U' F' U2 F B U' M' D D2 M F' U B' U2 F U' F' U2 F B U' M' D2 M D2 M F' U B' U2 F U' F' U2 F B U' M' D2 M' L2 D' M F' U B' U2 F U' F' U2 F B U' M' D L2 D M F' U B' U2 F U' F' U2 F B U' M' D' F' U B' U2 F U' F' U2 F B U' L' D M2 F' U B' U2 F U' F' U2 F B U' M2 D' L M D2 M F' U B' U2 F U' F' U2 F B U' M' D2 M'

Test (II)

StageCube StateMove Sequence
Scrambled CubeU F2 B2 U F L' U' F2 L' R2 D L' F2 U' D2 B2 F R' D' B' D2 L' D2 L2 D
Corners SolvedL F2 F' U B' U2 F U' F' U2 F B U' F2 L' L F F' U B' U2 F U' F' U2 F B U' F' L' F' U B' U2 F U' F' U2 F B U' D' F' F' U B' U2 F U' F' U2 F B U' F D D F2 F' U B' U2 F U' F' U2 F B U' F2 D' D' F2 F' U B' U2 F U' F' U2 F B U' F2 D L' F F' U B' U2 F U' F' U2 F B U' F' L
Edges SolvedF' U B' U2 F U' F' U2 F B U' M2 D2 M F' U B' U2 F U' F' U2 F B U' M' D2 M2 D M2 F' U B' U2 F U' F' U2 F B U' M2 D' M' F' U B' U2 F U' F' U2 F B U' M L' D M2 F' U B' U2 F U' F' U2 F B U' M2 D' L D' M2 F' U B' U2 F U' F' U2 F B U' M2 D E2 L D' M F' U B' U2 F U' F' U2 F B U' M' D L' E2 L D' M F' U B' U2 F U' F' U2 F B U' M' D L' M F' U B' U2 F U' F' U2 F B U' M' L2 D M2 F' U B' U2 F U' F' U2 F B U' M2 D' L2 L2 D' M F' U B' U2 F U' F' U2 F B U' M' D L2 E' L D' M F' U B' U2 F U' F' U2 F B U' M' D L' E M2 F' U B' U2 F U' F' U2 F B U' M2 E' L D' M F' U B' U2 F U' F' U2 F B U' M' D L' E

Test (III)

StageCube StateMove Sequence
Scrambled CubeB2 R2 D2 R2 L' U' B' U2 F L U L' D L' F2 D' U L' F' D' R U2 B2 D2 B2
Corners SolvedD' F2 F' U B' U2 F U' F' U2 F B U' F2 D L2 F2 F' U B' U2 F U' F' U2 F B U' F2 L2 L D F' F' U B' U2 F U' F' U2 F B U' F D' L' D2 F2 F' U B' U2 F U' F' U2 F B U' F2 D2 L' F2 F' U B' U2 F U' F' U2 F B U' F2 L F D' F2 F' U B' U2 F U' F' U2 F B U' F2 D F' D F' F' U B' U2 F U' F' U2 F B U' F D'
Edges SolvedF' U B' U2 F U' F' U2 F B U' L2 D M2 F' U B' U2 F U' F' U2 F B U' M2 D' L2 E' L D' M F' U B' U2 F U' F' U2 F B U' M' D L' E M D2 M F' U B' U2 F U' F' U2 F B U' M' D2 M' M2 D2 M F' U B' U2 F U' F' U2 F B U' M' D2 M2 D M F' U B' U2 F U' F' U2 F B U' M' D' D2 M2 F' U B' U2 F U' F' U2 F B U' M2 D2 M D2 M F' U B' U2 F U' F' U2 F B U' M' D2 M' L D' M F' U B' U2 F U' F' U2 F B U' M' D L' L D M2 F' U B' U2 F U' F' U2 F B U' M2 D' L' E2 L D' M F' U B' U2 F U' F' U2 F B U' M' D L' E2 M2 F' U B' U2 F U' F' U2 F B U' M2 L' D M2 F' U B' U2 F U' F' U2 F B U' M2 D' L E L' D' M F' U B' U2 F U' F' U2 F B U' M' D L E' D' M F' U B' U2 F U' F' U2 F B U' M' D D M2 F' U B' U2 F U' F' U2 F B U' M2 D'

Test (IV)

StageCube StateMove Sequence
Scrambled CubeL2 F' R' D2 R B' F D' R D' L' D R D2 F R U' R2 F2 D' B2 F' L2 B L2
Corners SolvedD2 L' F F' U B' U2 F U' F' U2 F B U' F' L D2 D F2 F' U B' U2 F U' F' U2 F B U' F2 D' D' L' F F' U B' U2 F U' F' U2 F B U' F' L D L2 F2 F' U B' U2 F U' F' U2 F B U' F2 L2 L' F F' U B' U2 F U' F' U2 F B U' F' L
Edges SolvedF' U B' U2 F U' F' U2 F B U' E' L D' M F' U B' U2 F U' F' U2 F B U' M' D L' E D' M2 F' U B' U2 F U' F' U2 F B U' M2 D L' D M2 F' U B' U2 F U' F' U2 F B U' M2 D' L L2 D' M F' U B' U2 F U' F' U2 F B U' M' D L2 L D M2 F' U B' U2 F U' F' U2 F B U' M2 D' L' M D2 M F' U B' U2 F U' F' U2 F B U' M' D2 M' D2 M F' U B' U2 F U' F' U2 F B U' M' D2 E2 L D' M F' U B' U2 F U' F' U2 F B U' M' D L' E2 M' F' U B' U2 F U' F' U2 F B U' M F' U B' U2 F U' F' U2 F B U' D' M F' U B' U2 F U' F' U2 F B U' M' D D2 M2 F' U B' U2 F U' F' U2 F B U' M2 D2 F' U B' U2 F U' F' U2 F B U'

It is more than just a "solver"!

Unlike Cerb, Mono allows you to edit the solved state files to any configuration you want the cube to have. ./solved/solvedEdges.txt and ./solved/solvedcorners.txt can be edited using the same lettering scheme that you would use to create the configuration files for your scrambled cube. The generated solution would take the cube from the scrambled state, specified by the EDGE_CONFIG and CORNER_CONFIG files to the final state which is given in ./solved/solvedEdges.txt and ./solved/solvedCorners.txt.

Releases

No releases published

Packages

No packages published