Skip to content

or18/Rubiks-cube-xcross-solver

Repository files navigation

Rubiks-cube-xcross-solver

C++ source to solve Rubik's cube cross, xcross, xxcross, xxxcross, xxxxcross, last layer substeps (OLL, ZBLL, etc.), last layer. Demo solver: https://or18.github.io/Rubiks-cube-xcross-solver/

Note

  • Memory required (for main.cpp, cli.cpp). For more detail performance, please see Performance.
solver memory
cross 4.2 MB
xcross 574 MB
xxcross 859 MB
xxxcross 1.15 GB
xxxxcross 1.43 GB
LL substeps 1.43 GB
LL 1.43 GB
LL AUF 1.43 GB
  • Add the following three lines to further speed up the process
#pragma GCC target("avx2")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
  • CLI is available. See cli.cpp and cli_output.txt.
  • Lite version is available. See cli_lite.cpp and cli_lite_without_thread.cpp. For cross, xcross, xxcross and xxxcross, this cli is better.
  • Demo solver is available. See https://or18.github.io/Rubiks-cube-xcross-solver/
  • cli.cpp and cli_lite.cpp testing on github codespace.
    cli.cpp
    cli_lite.cpp

How to use

sample script

    solve_F2L( //sample program to output xxcross solutions
        "R' F D L2 U' R2 U' F2 U' F2 R2 B2 D2 F L' R' D2 F' D L R", //scramble
        "z2", //pre rotation
        true, //solve BL slot or not
        false, //solve BR slot or not
        false, //solve FR slot or not
        true, //solve FL slot or not
        12, //max solution length
        100, //max solution number
        "UDLRFB" //face restrict (use U, D, L, R, F, B)
        );

compile and run

!g++ -Ofast -mtune=native -march=native main.cpp -pthread
!./a.out

output

1: z2 R D L2 F' R2 D2 L' U L2 B2 
2: z2 U D' F' L' R' U D2 R2 F2 U2 B
3: z2 U2 F' R2 D' B D2 R' U2 F L' D'
4: z2 U' L' D2 R U D L2 D2 B' U' L'
5: z2 U' L' F2 D2 R D' B' L' B' U' B
6: z2 D L2 D' L2 R U2 F U' L' D' B
7: z2 D F' R B U B2 L D' L' U L'
8: z2 D2 R' B2 U' R D' B' U' R2 F L'
9: z2 D2 F' L' D' F L' D' R F2 L' D'
10: z2 D' R' U' F' D2 B2 R' F U L2 D2
11: z2 D' F' U L R' B2 R2 U2 F' D' L2
12: z2 D' F' U L' R' D2 F' U R2 F2 B2
13: z2 D' F' L' R' D2 F' U R2 F2 B2 R
14: z2 L2 R U2 F U L U2 D L' D2 B
15: z2 L2 R U2 F D F2 U' L' D2 R2 B
16: z2 L2 R U2 F D F2 U' L' D2 B R2
17: z2 L2 R U2 F L U' D F' L' D2 B
18: z2 L2 R U2 F B2 L' U' D L D2 B
19: z2 L2 R B R D' R' U L' F D' B
20: z2 L2 F' U D2 R D' R' B' L' U B2
21: z2 L' R D F R2 B2 U L' R2 D' R'
22: z2 L' F R B2 L2 U' F L D' R B2
23: z2 L' F2 D B2 U' L' B R' D B' R
24: z2 L' F2 B2 L D' R F' U' F2 L B
25: z2 L' F2 B' D' B' U' R F L U' B
26: z2 L' F' U F2 R U F D F L' D2
27: z2 L' B2 U L R' B' L2 U F2 D B
28: z2 R U L2 U' F' L' F2 D F L' D2 
29: z2 R U B2 U' L2 U2 F U' L' D' B
30: z2 R U' D' L2 F2 L2 R B D F2 B2
31: z2 R U' L2 U2 B2 L2 F U' L D' B
32: z2 R U' F D' R U' B' L' R U2 L
33: z2 R D L2 D' L2 U2 F U' L' D' B
34: z2 R D L2 F' D R' D2 L2 F2 L' D'
35: z2 R D L2 F' R2 D2 L' U L2 B2 U
36: z2 R D L2 F' R2 D2 L' U L2 B2 U2
37: z2 R D L2 F' R2 D2 L' U L2 B2 U'
38: z2 R F' D L' D2 F2 L2 B' D' F2 R'
39: z2 R F' D' L' F2 L2 R B' D' F2 R'
40: z2 R F' D' L' F2 L2 B' R D' F2 R'
41: z2 R B' L2 U D' L' F D' B U' F'
42: z2 R2 D R' U B2 L U' F U L2 D'
43: z2 R' U F2 D L' B2 U2 D2 B D B2
44: z2 R' D R2 U L' F B2 D F' D2 B'
45: z2 B2 L' F B2 U' D R U' B' L' B'
46: z2 B' L' R F R U D F2 L' D2 F' 
47: z2 U D L2 D2 F' L' R' U' L2 B2 D2 B
48: z2 U D L' F D2 F' R' D' R2 B2 D' B'
49: z2 U D L' B R2 B' R' D' R2 B2 D' B'
50: z2 U D F D2 F' L' R' U' B2 L2 D2 B'
51: z2 U D F' R' U2 R' U' B' R2 F2 L' B'
52: z2 U D F' R' U2 R' B' U' R2 F2 L' B'
53: z2 U D B R2 B' L' R' D' R2 B2 D' B'
54: z2 U D2 R' U D' R2 F2 U' B' L' U B
55: z2 U D2 F' L' D2 R U F' U' B2 D' B'
56: z2 U D' L2 F2 R' F' L' B2 R2 D' L2 B
57: z2 U D' R F R U2 R U' L B' R2 F
58: z2 U D' R2 B2 R' F L' D2 B' D L2 B2
59: z2 U D' R' F U R' B2 D L R' F2 B
60: z2 U D' F R' U R' B2 D L R' F2 B
61: z2 U D' F B2 D2 L' R B2 U B2 D B
62: z2 U D' F' D2 L' R B2 U' D2 B2 D B
63: z2 U D' F' L R' B2 R2 U2 D F' D2 L2
64: z2 U D' F' L R' B2 R2 U2 D' L2 U2 B
65: z2 U D' F' L' R' U D2 R2 F2 U2 B U
66: z2 U D' F' L' R' U D2 R2 F2 U2 B U2
67: z2 U D' F' L' R' U D2 R2 F2 U2 B U' 
68: z2 U D' F' L' R' U' D2 F2 U2 R2 F2 B
69: z2 U D' F' R' F L' U D2 R2 F2 U2 B
70: z2 U D' F' R' F2 L' U D2 R2 F2 U2 B
71: z2 U D' F' R' F' L' U D2 R2 F2 U2 B
72: z2 U D' B2 R2 F D2 L' R D B2 L2 B'
73: z2 U L' U F' R' B2 U B D R' F2 B2
74: z2 U R D' F2 U L2 U R F2 B D B2
75: z2 U R F R2 U2 R' U' R D' R F2 B'
76: z2 U R F' R2 F2 D L' D' R2 B2 D' B'
77: z2 U R F' R2 F2 R2 D L' D' B2 D' B'
78: z2 U R B' L2 U2 F B' U L U2 D' B
79: z2 U R' U' R2 U' F D' R U' F2 B' R
80: z2 U R' B' L' R' F U' D B' R F B2
81: z2 U F U' L F2 D R' B' U F2 U2 L'
82: z2 U F2 U2 R U2 F U D L' D2 B' R2
83: z2 U F2 U2 R U2 F D L' U D2 B' R2
84: z2 U F' R F' D B2 L' F2 U2 D' F2 B
85: z2 U B2 L B2 L2 D2 B2 U' D' B' U' L'
86: z2 U2 D' R' U' F L F2 R2 U2 F2 B' R
87: z2 U2 D' F' U' L' R' U D2 R2 F2 U2 B 
88: z2 U2 L' U D2 R D L2 D2 B' U' L' R2
89: z2 U2 L' U D' L2 D' R D' B' U' L' R2
90: z2 U2 L' U' D' L2 F L R' U R2 F2 B
91: z2 U2 L' F2 D2 R U D' B' U2 L' B R
92: z2 U2 L' F2 L' R F U' D L' D2 R B
93: z2 U2 L' F2 L' R2 D R' F U' L' D' B
94: z2 U2 L' F' U D R' U' B' R2 F L' B'
95: z2 U2 L' B D' F U' L R' U R2 F' B2
96: z2 U2 R F D' F U' F' U2 F2 R F2 B'
97: z2 U2 R' U2 D R' B U' F2 B U2 L' B
98: z2 U2 R' U' D L' D B2 D B D B2 R'
99: z2 U2 F2 U R U' F D L U2 L2 D2 B'
100: z2 U2 F2 R2 D R D2 L2 B' U R D F2

Performance

Test Environment

11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
Cores: 4
Processors: 8
RAM: 16 GB

F2L solver

scramble: B U2 B' R F B' D R B' R2 B2 L D2 B2 R' U2 R' U2 F2 L2
rotation: z2
solution count: 100
face restrict: UDLFRF

slot option setup (ms) search (ms) Memory (MB)
None 11 25 8
BL 4784 31 564
BL FL 5786 41 842
BL BR FL 5611 920 1121
BL BR FR FL 5801 35133 1399

lite version

slot option setup (ms) search (ms) Memory (MB)
None 15 31 8
BL 379 31 42
BL FL 312 94 59
BL BR FL 392 5357 76
BL BR FR FL 372 329173 94

LL substeps solver

scramble1: L F R2 L' U2 F R F R2 F2 U2 R2 F' U2 F U2 F' (last layer)
rotation:
solution count: 50

LL option face restrict setup (ms) search (ms) Memory (MB)
EO UDLRFB 6622 2201 1400
EO UDRF 6634 374 1400
EO URF 6073 31 1400
EO CO UDLRFB 6441 6721 1400
EO CO UDRF 6278 6103 1400
EO CO URF 6116 579 1400
EO CO CP UDLRFB 6225 50698 1400
EO CO CP UDRF 6608 45860 1400
EO CO CP URF 6486 3217 1400

scramble2: U' L2 F' L' U F' R' U2 D2 F2 R D2 L' U2 F2 R' B2 (last layer & FR slot)
rotation:
solution count: 50

LL option face restrict setup (ms) search (ms) Memory (MB)
EO UDLRFB 6554 502 1400
EO UDRF 6317 391 1400
EO URF 6061 31 1400
EO CO UDLRFB 6428 25144 1400
EO CO UDRF 6160 16189 1400
EO CO URF 6141 1238 1400
EO CO CP UDLRFB 6106 336487 1400
EO CO CP UDRF 6064 192209 1400
EO CO CP URF 6672 13133 1400

LL solver

scramble1: L2 R2 U R2 U' B2 D B2 L2 U R2 U L R' F2 L' R'
rotation:
solution count: 20

face restrict setup (ms) search (ms) Memory (MB)
UDLRFB 6006 34934 1400
UDRF 6400 39588 1400
URF 6298 3256 1400

scramble2: R D L2 D' R' D L2 U L2 F2 D R2 U F2 D2 L2 B2
rotation:
solutions count: 20

face restrict setup (ms) search (ms) Memory (MB)
UDLRFB 6465 113948 1400
UDRF 6693 57412 1400
URF 6431 14209 1400

scramble3: U2 F2 L2 D2 F2 U2 B2 R' F2 D2 L' B D L' D L' F2 R'
rotation:
solutions count: 20

face restrict setup (ms) search (ms) Memory (MB)
UDLRFB 6431 200947 1400
UDRF 6030 422548 1400
URF 6343 18259 1400

About

C++ source to solve Rubik's cube cross, xcross, xxcross, xxxcross, xxxxcross, last layer substeps (OLL, ZBLS, etc.), last layer.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published