diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2025-04-22 18:45:12 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2025-04-22 18:45:12 +0200 |
| commit | 77fbe3d7cbd8448f8124dba143bc5110344c6b49 (patch) | |
| tree | 43a4f9f8966855a54f1e2749e6bfc6861d5f5732 | |
| parent | bab22e1946a656088804b61cf765461b48744971 (diff) | |
| download | nissy-core-77fbe3d7cbd8448f8124dba143bc5110344c6b49.tar.gz nissy-core-77fbe3d7cbd8448f8124dba143bc5110344c6b49.zip | |
Progress
Diffstat (limited to '')
| -rw-r--r-- | README.md | 24 | ||||
| -rw-r--r-- | src/arch/common.h | 14 | ||||
| -rw-r--r-- | src/core/constant_cubes.h | 229 | ||||
| -rw-r--r-- | src/core/constants.h | 655 | ||||
| -rw-r--r-- | src/core/core.h | 2 | ||||
| -rw-r--r-- | src/core/cube.h | 4 | ||||
| -rw-r--r-- | src/utils/constants.h | 363 |
7 files changed, 692 insertions, 599 deletions
| @@ -282,14 +282,30 @@ Edges are numbered as follows (see also constants.h): | |||
| 282 | UF=0 UB=1 DB=2 DF=3 UR=4 UL=5 DL=6 DR=7 FR=8 FL=9 BL=10 BR=11 | 282 | UF=0 UB=1 DB=2 DF=3 UR=4 UL=5 DL=6 DR=7 FR=8 FL=9 BL=10 BR=11 |
| 283 | ``` | 283 | ``` |
| 284 | 284 | ||
| 285 | If the edge is misoriented with respect to the F/B axis, the value | ||
| 286 | is increased by 16. | ||
| 287 | |||
| 285 | Corners are numbered as follows: | 288 | Corners are numbered as follows: |
| 286 | 289 | ||
| 287 | ``` | 290 | ``` |
| 288 | UFR=0 UBL=1 DFL=2 DBR=3 UFL=4 UBR=5 DFR=6 DBL=7 | 291 | UFR=0 UBL=1 DFL=2 DBR=3 UFL=4 UBR=5 DFR=6 DBL=7 |
| 289 | ``` | 292 | ``` |
| 290 | 293 | ||
| 291 | At the moment, the only orientation supported is the standard one, as wide | 294 | If the corner is twisted clockwise with respect to the U/D |
| 292 | moves, rotations and slice moves are not supported. | 295 | axis orientation, the value is increased by 8. If it is twisted |
| 296 | counter-clowsie, the value is increased by 16. | ||
| 297 | |||
| 298 | The orientations of the cube are numbered as follows, where e.g. "RB" | ||
| 299 | means that the R face in on top and the B face is on front: | ||
| 300 | |||
| 301 | ``` | ||
| 302 | UF=0 UR=1 UB=2 UL=3 | ||
| 303 | DF=4 DR=5 DB=6 DL=7 | ||
| 304 | RF=8 RD=9 RB=10 RU=11 | ||
| 305 | LF=12 LD=13 LB=14 LU=15 | ||
| 306 | FD=16 FR=17 FU=18 FL=19 | ||
| 307 | BD=20 BR=21 BU=22 BL=23 | ||
| 308 | ``` | ||
| 293 | 309 | ||
| 294 | In this format, the solved cube looks like this: | 310 | In this format, the solved cube looks like this: |
| 295 | 311 | ||
| @@ -297,10 +313,10 @@ In this format, the solved cube looks like this: | |||
| 297 | ABCDEFGH=ABCDEFGHIJKL=A | 313 | ABCDEFGH=ABCDEFGHIJKL=A |
| 298 | ``` | 314 | ``` |
| 299 | 315 | ||
| 300 | The cube after the move F looks like this: | 316 | The cube after the move Fw looks like this: |
| 301 | 317 | ||
| 302 | ``` | 318 | ``` |
| 303 | MBODSFQH=ZBCYEFGHQTKL=A | 319 | ANCPETGR=AbaDEFGHIJRS=L |
| 304 | ``` | 320 | ``` |
| 305 | 321 | ||
| 306 | A cube in B32 format is always 23 characters long (24 if the terminating | 322 | A cube in B32 format is always 23 characters long (24 if the terminating |
diff --git a/src/arch/common.h b/src/arch/common.h index e57fba9..922ea51 100644 --- a/src/arch/common.h +++ b/src/arch/common.h | |||
| @@ -1,3 +1,17 @@ | |||
| 1 | #define EOSHIFT UINT8_C(4) | ||
| 2 | #define COSHIFT UINT8_C(5) | ||
| 3 | |||
| 4 | #define PBITS UINT8_C(0xF) | ||
| 5 | #define ESEPBIT_1 UINT8_C(0x4) | ||
| 6 | #define ESEPBIT_2 UINT8_C(0x8) | ||
| 7 | #define CSEPBIT UINT8_C(0x4) | ||
| 8 | #define EOBIT UINT8_C(0x10) | ||
| 9 | #define COBITS UINT8_C(0xF0) | ||
| 10 | #define COBITS_2 UINT8_C(0x60) | ||
| 11 | #define CTWIST_CW UINT8_C(0x20) | ||
| 12 | #define CTWIST_CCW UINT8_C(0x40) | ||
| 13 | #define EFLIP UINT8_C(0x10) | ||
| 14 | |||
| 1 | STATIC_INLINE int popcount_u32(uint32_t); | 15 | STATIC_INLINE int popcount_u32(uint32_t); |
| 2 | 16 | ||
| 3 | STATIC void pieces(cube_t [static 1], uint8_t [static 8], uint8_t [static 12]); | 17 | STATIC void pieces(cube_t [static 1], uint8_t [static 8], uint8_t [static 12]); |
diff --git a/src/core/constant_cubes.h b/src/core/constant_cubes.h deleted file mode 100644 index 9657e1a..0000000 --- a/src/core/constant_cubes.h +++ /dev/null | |||
| @@ -1,229 +0,0 @@ | |||
| 1 | #define MOVE_CUBE_U STATIC_CUBE( \ | ||
| 2 | 5, 4, 2, 3, 0, 1, 6, 7, 4, 5, 2, 3, 1, 0, 6, 7, 8, 9, 10, 11) | ||
| 3 | #define MOVE_CUBE_U2 STATIC_CUBE( \ | ||
| 4 | 1, 0, 2, 3, 5, 4, 6, 7, 1, 0, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11) | ||
| 5 | #define MOVE_CUBE_U3 STATIC_CUBE( \ | ||
| 6 | 4, 5, 2, 3, 1, 0, 6, 7, 5, 4, 2, 3, 0, 1, 6, 7, 8, 9, 10, 11) | ||
| 7 | #define MOVE_CUBE_D STATIC_CUBE( \ | ||
| 8 | 0, 1, 7, 6, 4, 5, 2, 3, 0, 1, 7, 6, 4, 5, 2, 3, 8, 9, 10, 11) | ||
| 9 | #define MOVE_CUBE_D2 STATIC_CUBE( \ | ||
| 10 | 0, 1, 3, 2, 4, 5, 7, 6, 0, 1, 3, 2, 4, 5, 7, 6, 8, 9, 10, 11) | ||
| 11 | #define MOVE_CUBE_D3 STATIC_CUBE( \ | ||
| 12 | 0, 1, 6, 7, 4, 5, 3, 2, 0, 1, 6, 7, 4, 5, 3, 2, 8, 9, 10, 11) | ||
| 13 | #define MOVE_CUBE_R STATIC_CUBE( \ | ||
| 14 | 70, 1, 2, 69, 4, 32, 35, 7, 0, 1, 2, 3, 8, 5, 6, 11, 7, 9, 10, 4) | ||
| 15 | #define MOVE_CUBE_R2 STATIC_CUBE( \ | ||
| 16 | 3, 1, 2, 0, 4, 6, 5, 7, 0, 1, 2, 3, 7, 5, 6, 4, 11, 9, 10, 8) | ||
| 17 | #define MOVE_CUBE_R3 STATIC_CUBE( \ | ||
| 18 | 69, 1, 2, 70, 4, 35, 32, 7, 0, 1, 2, 3, 11, 5, 6, 8, 4, 9, 10, 7) | ||
| 19 | #define MOVE_CUBE_L STATIC_CUBE( \ | ||
| 20 | 0, 71, 68, 3, 33, 5, 6, 34, 0, 1, 2, 3, 4, 10, 9, 7, 8, 5, 6, 11) | ||
| 21 | #define MOVE_CUBE_L2 STATIC_CUBE( \ | ||
| 22 | 0, 2, 1, 3, 7, 5, 6, 4, 0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11) | ||
| 23 | #define MOVE_CUBE_L3 STATIC_CUBE( \ | ||
| 24 | 0, 68, 71, 3, 34, 5, 6, 33, 0, 1, 2, 3, 4, 9, 10, 7, 8, 6, 5, 11) | ||
| 25 | #define MOVE_CUBE_F STATIC_CUBE( \ | ||
| 26 | 36, 1, 38, 3, 66, 5, 64, 7, 25, 1, 2, 24, 4, 5, 6, 7, 16, 19, 10, 11) | ||
| 27 | #define MOVE_CUBE_F2 STATIC_CUBE( \ | ||
| 28 | 2, 1, 0, 3, 6, 5, 4, 7, 3, 1, 2, 0, 4, 5, 6, 7, 9, 8, 10, 11) | ||
| 29 | #define MOVE_CUBE_F3 STATIC_CUBE( \ | ||
| 30 | 38, 1, 36, 3, 64, 5, 66, 7, 24, 1, 2, 25, 4, 5, 6, 7, 19, 16, 10, 11) | ||
| 31 | #define MOVE_CUBE_B STATIC_CUBE( \ | ||
| 32 | 0, 37, 2, 39, 4, 67, 6, 65, 0, 27, 26, 3, 4, 5, 6, 7, 8, 9, 17, 18) | ||
| 33 | #define MOVE_CUBE_B2 STATIC_CUBE( \ | ||
| 34 | 0, 3, 2, 1, 4, 7, 6, 5, 0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 11, 10) | ||
| 35 | #define MOVE_CUBE_B3 STATIC_CUBE( \ | ||
| 36 | 0, 39, 2, 37, 4, 65, 6, 67, 0, 26, 27, 3, 4, 5, 6, 7, 8, 9, 18, 17) | ||
| 37 | |||
| 38 | #define TRANS_CUBE_UFr STATIC_CUBE( \ | ||
| 39 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) | ||
| 40 | #define TRANS_CUBE_UFr_INVERSE STATIC_CUBE( \ | ||
| 41 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) | ||
| 42 | #define TRANS_CUBE_ULr STATIC_CUBE( \ | ||
| 43 | 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24) | ||
| 44 | #define TRANS_CUBE_ULr_INVERSE STATIC_CUBE( \ | ||
| 45 | 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26) | ||
| 46 | #define TRANS_CUBE_UBr STATIC_CUBE( \ | ||
| 47 | 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9) | ||
| 48 | #define TRANS_CUBE_UBr_INVERSE STATIC_CUBE( \ | ||
| 49 | 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9) | ||
| 50 | #define TRANS_CUBE_URr STATIC_CUBE( \ | ||
| 51 | 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26) | ||
| 52 | #define TRANS_CUBE_URr_INVERSE STATIC_CUBE( \ | ||
| 53 | 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24) | ||
| 54 | #define TRANS_CUBE_DFr STATIC_CUBE( \ | ||
| 55 | 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10) | ||
| 56 | #define TRANS_CUBE_DFr_INVERSE STATIC_CUBE( \ | ||
| 57 | 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10) | ||
| 58 | #define TRANS_CUBE_DLr STATIC_CUBE( \ | ||
| 59 | 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27) | ||
| 60 | #define TRANS_CUBE_DLr_INVERSE STATIC_CUBE( \ | ||
| 61 | 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27) | ||
| 62 | #define TRANS_CUBE_DBr STATIC_CUBE( \ | ||
| 63 | 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8) | ||
| 64 | #define TRANS_CUBE_DBr_INVERSE STATIC_CUBE( \ | ||
| 65 | 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8) | ||
| 66 | #define TRANS_CUBE_DRr STATIC_CUBE( \ | ||
| 67 | 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25) | ||
| 68 | #define TRANS_CUBE_DRr_INVERSE STATIC_CUBE( \ | ||
| 69 | 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25) | ||
| 70 | #define TRANS_CUBE_RUr STATIC_CUBE( \ | ||
| 71 | 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3) | ||
| 72 | #define TRANS_CUBE_RUr_INVERSE STATIC_CUBE( \ | ||
| 73 | 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21) | ||
| 74 | #define TRANS_CUBE_RFr STATIC_CUBE( \ | ||
| 75 | 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18) | ||
| 76 | #define TRANS_CUBE_RFr_INVERSE STATIC_CUBE( \ | ||
| 77 | 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17) | ||
| 78 | #define TRANS_CUBE_RDr STATIC_CUBE( \ | ||
| 79 | 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1) | ||
| 80 | #define TRANS_CUBE_RDr_INVERSE STATIC_CUBE( \ | ||
| 81 | 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20) | ||
| 82 | #define TRANS_CUBE_RBr STATIC_CUBE( \ | ||
| 83 | 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16) | ||
| 84 | #define TRANS_CUBE_RBr_INVERSE STATIC_CUBE( \ | ||
| 85 | 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16) | ||
| 86 | #define TRANS_CUBE_LUr STATIC_CUBE( \ | ||
| 87 | 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2) | ||
| 88 | #define TRANS_CUBE_LUr_INVERSE STATIC_CUBE( \ | ||
| 89 | 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23) | ||
| 90 | #define TRANS_CUBE_LFr STATIC_CUBE( \ | ||
| 91 | 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17) | ||
| 92 | #define TRANS_CUBE_LFr_INVERSE STATIC_CUBE( \ | ||
| 93 | 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18) | ||
| 94 | #define TRANS_CUBE_LDr STATIC_CUBE( \ | ||
| 95 | 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0) | ||
| 96 | #define TRANS_CUBE_LDr_INVERSE STATIC_CUBE( \ | ||
| 97 | 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22) | ||
| 98 | #define TRANS_CUBE_LBr STATIC_CUBE( \ | ||
| 99 | 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19) | ||
| 100 | #define TRANS_CUBE_LBr_INVERSE STATIC_CUBE( \ | ||
| 101 | 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19) | ||
| 102 | #define TRANS_CUBE_FUr STATIC_CUBE( \ | ||
| 103 | 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6) | ||
| 104 | #define TRANS_CUBE_FUr_INVERSE STATIC_CUBE( \ | ||
| 105 | 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6) | ||
| 106 | #define TRANS_CUBE_FRr STATIC_CUBE( \ | ||
| 107 | 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21) | ||
| 108 | #define TRANS_CUBE_FRr_INVERSE STATIC_CUBE( \ | ||
| 109 | 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3) | ||
| 110 | #define TRANS_CUBE_FDr STATIC_CUBE( \ | ||
| 111 | 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4) | ||
| 112 | #define TRANS_CUBE_FDr_INVERSE STATIC_CUBE( \ | ||
| 113 | 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7) | ||
| 114 | #define TRANS_CUBE_FLr STATIC_CUBE( \ | ||
| 115 | 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23) | ||
| 116 | #define TRANS_CUBE_FLr_INVERSE STATIC_CUBE( \ | ||
| 117 | 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2) | ||
| 118 | #define TRANS_CUBE_BUr STATIC_CUBE( \ | ||
| 119 | 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7) | ||
| 120 | #define TRANS_CUBE_BUr_INVERSE STATIC_CUBE( \ | ||
| 121 | 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4) | ||
| 122 | #define TRANS_CUBE_BRr STATIC_CUBE( \ | ||
| 123 | 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22) | ||
| 124 | #define TRANS_CUBE_BRr_INVERSE STATIC_CUBE( \ | ||
| 125 | 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0) | ||
| 126 | #define TRANS_CUBE_BDr STATIC_CUBE( \ | ||
| 127 | 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5) | ||
| 128 | #define TRANS_CUBE_BDr_INVERSE STATIC_CUBE( \ | ||
| 129 | 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5) | ||
| 130 | #define TRANS_CUBE_BLr STATIC_CUBE( \ | ||
| 131 | 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20) | ||
| 132 | #define TRANS_CUBE_BLr_INVERSE STATIC_CUBE( \ | ||
| 133 | 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1) | ||
| 134 | #define TRANS_CUBE_UFm STATIC_CUBE( \ | ||
| 135 | 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10) | ||
| 136 | #define TRANS_CUBE_UFm_INVERSE STATIC_CUBE( \ | ||
| 137 | 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10) | ||
| 138 | #define TRANS_CUBE_ULm STATIC_CUBE( \ | ||
| 139 | 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25) | ||
| 140 | #define TRANS_CUBE_ULm_INVERSE STATIC_CUBE( \ | ||
| 141 | 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25) | ||
| 142 | #define TRANS_CUBE_UBm STATIC_CUBE( \ | ||
| 143 | 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8) | ||
| 144 | #define TRANS_CUBE_UBm_INVERSE STATIC_CUBE( \ | ||
| 145 | 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8) | ||
| 146 | #define TRANS_CUBE_URm STATIC_CUBE( \ | ||
| 147 | 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27) | ||
| 148 | #define TRANS_CUBE_URm_INVERSE STATIC_CUBE( \ | ||
| 149 | 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27) | ||
| 150 | #define TRANS_CUBE_DFm STATIC_CUBE( \ | ||
| 151 | 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11) | ||
| 152 | #define TRANS_CUBE_DFm_INVERSE STATIC_CUBE( \ | ||
| 153 | 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11) | ||
| 154 | #define TRANS_CUBE_DLm STATIC_CUBE( \ | ||
| 155 | 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26) | ||
| 156 | #define TRANS_CUBE_DLm_INVERSE STATIC_CUBE( \ | ||
| 157 | 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24) | ||
| 158 | #define TRANS_CUBE_DBm STATIC_CUBE( \ | ||
| 159 | 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9) | ||
| 160 | #define TRANS_CUBE_DBm_INVERSE STATIC_CUBE( \ | ||
| 161 | 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9) | ||
| 162 | #define TRANS_CUBE_DRm STATIC_CUBE( \ | ||
| 163 | 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24) | ||
| 164 | #define TRANS_CUBE_DRm_INVERSE STATIC_CUBE( \ | ||
| 165 | 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26) | ||
| 166 | #define TRANS_CUBE_RUm STATIC_CUBE( \ | ||
| 167 | 68, 71, 69, 70, 33, 34, 32, 35, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3) | ||
| 168 | #define TRANS_CUBE_RUm_INVERSE STATIC_CUBE( \ | ||
| 169 | 70, 68, 69, 71, 32, 34, 35, 33, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22) | ||
| 170 | #define TRANS_CUBE_RFm STATIC_CUBE( \ | ||
| 171 | 34, 33, 32, 35, 68, 71, 70, 69, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18) | ||
| 172 | #define TRANS_CUBE_RFm_INVERSE STATIC_CUBE( \ | ||
| 173 | 66, 65, 64, 67, 36, 39, 38, 37, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18) | ||
| 174 | #define TRANS_CUBE_RDm STATIC_CUBE( \ | ||
| 175 | 71, 68, 70, 69, 34, 33, 35, 32, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1) | ||
| 176 | #define TRANS_CUBE_RDm_INVERSE STATIC_CUBE( \ | ||
| 177 | 71, 69, 68, 70, 33, 35, 34, 32, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23) | ||
| 178 | #define TRANS_CUBE_RBm STATIC_CUBE( \ | ||
| 179 | 33, 34, 35, 32, 71, 68, 69, 70, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16) | ||
| 180 | #define TRANS_CUBE_RBm_INVERSE STATIC_CUBE( \ | ||
| 181 | 67, 64, 65, 66, 37, 38, 39, 36, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19) | ||
| 182 | #define TRANS_CUBE_LUm STATIC_CUBE( \ | ||
| 183 | 69, 70, 68, 71, 32, 35, 33, 34, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2) | ||
| 184 | #define TRANS_CUBE_LUm_INVERSE STATIC_CUBE( \ | ||
| 185 | 68, 70, 71, 69, 34, 32, 33, 35, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20) | ||
| 186 | #define TRANS_CUBE_LFm STATIC_CUBE( \ | ||
| 187 | 32, 35, 34, 33, 70, 69, 68, 71, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17) | ||
| 188 | #define TRANS_CUBE_LFm_INVERSE STATIC_CUBE( \ | ||
| 189 | 64, 67, 66, 65, 38, 37, 36, 39, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17) | ||
| 190 | #define TRANS_CUBE_LDm STATIC_CUBE( \ | ||
| 191 | 70, 69, 71, 68, 35, 32, 34, 33, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0) | ||
| 192 | #define TRANS_CUBE_LDm_INVERSE STATIC_CUBE( \ | ||
| 193 | 69, 71, 70, 68, 35, 33, 32, 34, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21) | ||
| 194 | #define TRANS_CUBE_LBm STATIC_CUBE( \ | ||
| 195 | 35, 32, 33, 34, 69, 70, 71, 68, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19) | ||
| 196 | #define TRANS_CUBE_LBm_INVERSE STATIC_CUBE( \ | ||
| 197 | 65, 66, 67, 64, 39, 36, 37, 38, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16) | ||
| 198 | #define TRANS_CUBE_FUm STATIC_CUBE( \ | ||
| 199 | 64, 66, 65, 67, 36, 38, 37, 39, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7) | ||
| 200 | #define TRANS_CUBE_FUm_INVERSE STATIC_CUBE( \ | ||
| 201 | 32, 34, 33, 35, 68, 70, 69, 71, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7) | ||
| 202 | #define TRANS_CUBE_FRm STATIC_CUBE( \ | ||
| 203 | 36, 38, 39, 37, 66, 64, 65, 67, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20) | ||
| 204 | #define TRANS_CUBE_FRm_INVERSE STATIC_CUBE( \ | ||
| 205 | 37, 38, 36, 39, 64, 67, 65, 66, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2) | ||
| 206 | #define TRANS_CUBE_FDm STATIC_CUBE( \ | ||
| 207 | 66, 64, 67, 65, 38, 36, 39, 37, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5) | ||
| 208 | #define TRANS_CUBE_FDm_INVERSE STATIC_CUBE( \ | ||
| 209 | 33, 35, 32, 34, 69, 71, 68, 70, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6) | ||
| 210 | #define TRANS_CUBE_FLm STATIC_CUBE( \ | ||
| 211 | 38, 36, 37, 39, 64, 66, 67, 65, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22) | ||
| 212 | #define TRANS_CUBE_FLm_INVERSE STATIC_CUBE( \ | ||
| 213 | 36, 39, 37, 38, 65, 66, 64, 67, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3) | ||
| 214 | #define TRANS_CUBE_BUm STATIC_CUBE( \ | ||
| 215 | 65, 67, 64, 66, 37, 39, 36, 38, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6) | ||
| 216 | #define TRANS_CUBE_BUm_INVERSE STATIC_CUBE( \ | ||
| 217 | 34, 32, 35, 33, 70, 68, 71, 69, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5) | ||
| 218 | #define TRANS_CUBE_BRm STATIC_CUBE( \ | ||
| 219 | 39, 37, 36, 38, 65, 67, 66, 64, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23) | ||
| 220 | #define TRANS_CUBE_BRm_INVERSE STATIC_CUBE( \ | ||
| 221 | 39, 36, 38, 37, 66, 65, 67, 64, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1) | ||
| 222 | #define TRANS_CUBE_BDm STATIC_CUBE( \ | ||
| 223 | 67, 65, 66, 64, 39, 37, 38, 36, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4) | ||
| 224 | #define TRANS_CUBE_BDm_INVERSE STATIC_CUBE( \ | ||
| 225 | 35, 33, 34, 32, 71, 69, 70, 68, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4) | ||
| 226 | #define TRANS_CUBE_BLm STATIC_CUBE( \ | ||
| 227 | 37, 39, 38, 36, 67, 65, 64, 66, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21) | ||
| 228 | #define TRANS_CUBE_BLm_INVERSE STATIC_CUBE( \ | ||
| 229 | 38, 37, 39, 36, 67, 64, 66, 65, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0) | ||
diff --git a/src/core/constants.h b/src/core/constants.h new file mode 100644 index 0000000..824c0a5 --- /dev/null +++ b/src/core/constants.h | |||
| @@ -0,0 +1,655 @@ | |||
| 1 | #define ZERO_ORIENTED_CUBE ((oriented_cube_t) {0}) | ||
| 2 | #define SOLVED_ORIENTED_CUBE \ | ||
| 3 | ((oriented_cube_t) { .cube = SOLVED_CUBE, .orientation = 0 }) | ||
| 4 | |||
| 5 | #define MOVE_CUBE_U STATIC_CUBE( \ | ||
| 6 | 5, 4, 2, 3, 0, 1, 6, 7, 4, 5, 2, 3, 1, 0, 6, 7, 8, 9, 10, 11) | ||
| 7 | #define MOVE_CUBE_U2 STATIC_CUBE( \ | ||
| 8 | 1, 0, 2, 3, 5, 4, 6, 7, 1, 0, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11) | ||
| 9 | #define MOVE_CUBE_U3 STATIC_CUBE( \ | ||
| 10 | 4, 5, 2, 3, 1, 0, 6, 7, 5, 4, 2, 3, 0, 1, 6, 7, 8, 9, 10, 11) | ||
| 11 | #define MOVE_CUBE_D STATIC_CUBE( \ | ||
| 12 | 0, 1, 7, 6, 4, 5, 2, 3, 0, 1, 7, 6, 4, 5, 2, 3, 8, 9, 10, 11) | ||
| 13 | #define MOVE_CUBE_D2 STATIC_CUBE( \ | ||
| 14 | 0, 1, 3, 2, 4, 5, 7, 6, 0, 1, 3, 2, 4, 5, 7, 6, 8, 9, 10, 11) | ||
| 15 | #define MOVE_CUBE_D3 STATIC_CUBE( \ | ||
| 16 | 0, 1, 6, 7, 4, 5, 3, 2, 0, 1, 6, 7, 4, 5, 3, 2, 8, 9, 10, 11) | ||
| 17 | #define MOVE_CUBE_R STATIC_CUBE( \ | ||
| 18 | 70, 1, 2, 69, 4, 32, 35, 7, 0, 1, 2, 3, 8, 5, 6, 11, 7, 9, 10, 4) | ||
| 19 | #define MOVE_CUBE_R2 STATIC_CUBE( \ | ||
| 20 | 3, 1, 2, 0, 4, 6, 5, 7, 0, 1, 2, 3, 7, 5, 6, 4, 11, 9, 10, 8) | ||
| 21 | #define MOVE_CUBE_R3 STATIC_CUBE( \ | ||
| 22 | 69, 1, 2, 70, 4, 35, 32, 7, 0, 1, 2, 3, 11, 5, 6, 8, 4, 9, 10, 7) | ||
| 23 | #define MOVE_CUBE_L STATIC_CUBE( \ | ||
| 24 | 0, 71, 68, 3, 33, 5, 6, 34, 0, 1, 2, 3, 4, 10, 9, 7, 8, 5, 6, 11) | ||
| 25 | #define MOVE_CUBE_L2 STATIC_CUBE( \ | ||
| 26 | 0, 2, 1, 3, 7, 5, 6, 4, 0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11) | ||
| 27 | #define MOVE_CUBE_L3 STATIC_CUBE( \ | ||
| 28 | 0, 68, 71, 3, 34, 5, 6, 33, 0, 1, 2, 3, 4, 9, 10, 7, 8, 6, 5, 11) | ||
| 29 | #define MOVE_CUBE_F STATIC_CUBE( \ | ||
| 30 | 36, 1, 38, 3, 66, 5, 64, 7, 25, 1, 2, 24, 4, 5, 6, 7, 16, 19, 10, 11) | ||
| 31 | #define MOVE_CUBE_F2 STATIC_CUBE( \ | ||
| 32 | 2, 1, 0, 3, 6, 5, 4, 7, 3, 1, 2, 0, 4, 5, 6, 7, 9, 8, 10, 11) | ||
| 33 | #define MOVE_CUBE_F3 STATIC_CUBE( \ | ||
| 34 | 38, 1, 36, 3, 64, 5, 66, 7, 24, 1, 2, 25, 4, 5, 6, 7, 19, 16, 10, 11) | ||
| 35 | #define MOVE_CUBE_B STATIC_CUBE( \ | ||
| 36 | 0, 37, 2, 39, 4, 67, 6, 65, 0, 27, 26, 3, 4, 5, 6, 7, 8, 9, 17, 18) | ||
| 37 | #define MOVE_CUBE_B2 STATIC_CUBE( \ | ||
| 38 | 0, 3, 2, 1, 4, 7, 6, 5, 0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 11, 10) | ||
| 39 | #define MOVE_CUBE_B3 STATIC_CUBE( \ | ||
| 40 | 0, 39, 2, 37, 4, 65, 6, 67, 0, 26, 27, 3, 4, 5, 6, 7, 8, 9, 18, 17) | ||
| 41 | |||
| 42 | #define TRANS_CUBE_UFr STATIC_CUBE( \ | ||
| 43 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) | ||
| 44 | #define TRANS_CUBE_UFr_INVERSE STATIC_CUBE( \ | ||
| 45 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) | ||
| 46 | #define TRANS_CUBE_ULr STATIC_CUBE( \ | ||
| 47 | 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24) | ||
| 48 | #define TRANS_CUBE_ULr_INVERSE STATIC_CUBE( \ | ||
| 49 | 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26) | ||
| 50 | #define TRANS_CUBE_UBr STATIC_CUBE( \ | ||
| 51 | 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9) | ||
| 52 | #define TRANS_CUBE_UBr_INVERSE STATIC_CUBE( \ | ||
| 53 | 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9) | ||
| 54 | #define TRANS_CUBE_URr STATIC_CUBE( \ | ||
| 55 | 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26) | ||
| 56 | #define TRANS_CUBE_URr_INVERSE STATIC_CUBE( \ | ||
| 57 | 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24) | ||
| 58 | #define TRANS_CUBE_DFr STATIC_CUBE( \ | ||
| 59 | 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10) | ||
| 60 | #define TRANS_CUBE_DFr_INVERSE STATIC_CUBE( \ | ||
| 61 | 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10) | ||
| 62 | #define TRANS_CUBE_DLr STATIC_CUBE( \ | ||
| 63 | 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27) | ||
| 64 | #define TRANS_CUBE_DLr_INVERSE STATIC_CUBE( \ | ||
| 65 | 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27) | ||
| 66 | #define TRANS_CUBE_DBr STATIC_CUBE( \ | ||
| 67 | 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8) | ||
| 68 | #define TRANS_CUBE_DBr_INVERSE STATIC_CUBE( \ | ||
| 69 | 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8) | ||
| 70 | #define TRANS_CUBE_DRr STATIC_CUBE( \ | ||
| 71 | 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25) | ||
| 72 | #define TRANS_CUBE_DRr_INVERSE STATIC_CUBE( \ | ||
| 73 | 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25) | ||
| 74 | #define TRANS_CUBE_RUr STATIC_CUBE( \ | ||
| 75 | 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3) | ||
| 76 | #define TRANS_CUBE_RUr_INVERSE STATIC_CUBE( \ | ||
| 77 | 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21) | ||
| 78 | #define TRANS_CUBE_RFr STATIC_CUBE( \ | ||
| 79 | 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18) | ||
| 80 | #define TRANS_CUBE_RFr_INVERSE STATIC_CUBE( \ | ||
| 81 | 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17) | ||
| 82 | #define TRANS_CUBE_RDr STATIC_CUBE( \ | ||
| 83 | 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1) | ||
| 84 | #define TRANS_CUBE_RDr_INVERSE STATIC_CUBE( \ | ||
| 85 | 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20) | ||
| 86 | #define TRANS_CUBE_RBr STATIC_CUBE( \ | ||
| 87 | 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16) | ||
| 88 | #define TRANS_CUBE_RBr_INVERSE STATIC_CUBE( \ | ||
| 89 | 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16) | ||
| 90 | #define TRANS_CUBE_LUr STATIC_CUBE( \ | ||
| 91 | 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2) | ||
| 92 | #define TRANS_CUBE_LUr_INVERSE STATIC_CUBE( \ | ||
| 93 | 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23) | ||
| 94 | #define TRANS_CUBE_LFr STATIC_CUBE( \ | ||
| 95 | 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17) | ||
| 96 | #define TRANS_CUBE_LFr_INVERSE STATIC_CUBE( \ | ||
| 97 | 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18) | ||
| 98 | #define TRANS_CUBE_LDr STATIC_CUBE( \ | ||
| 99 | 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0) | ||
| 100 | #define TRANS_CUBE_LDr_INVERSE STATIC_CUBE( \ | ||
| 101 | 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22) | ||
| 102 | #define TRANS_CUBE_LBr STATIC_CUBE( \ | ||
| 103 | 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19) | ||
| 104 | #define TRANS_CUBE_LBr_INVERSE STATIC_CUBE( \ | ||
| 105 | 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19) | ||
| 106 | #define TRANS_CUBE_FUr STATIC_CUBE( \ | ||
| 107 | 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6) | ||
| 108 | #define TRANS_CUBE_FUr_INVERSE STATIC_CUBE( \ | ||
| 109 | 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6) | ||
| 110 | #define TRANS_CUBE_FRr STATIC_CUBE( \ | ||
| 111 | 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21) | ||
| 112 | #define TRANS_CUBE_FRr_INVERSE STATIC_CUBE( \ | ||
| 113 | 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3) | ||
| 114 | #define TRANS_CUBE_FDr STATIC_CUBE( \ | ||
| 115 | 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4) | ||
| 116 | #define TRANS_CUBE_FDr_INVERSE STATIC_CUBE( \ | ||
| 117 | 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7) | ||
| 118 | #define TRANS_CUBE_FLr STATIC_CUBE( \ | ||
| 119 | 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23) | ||
| 120 | #define TRANS_CUBE_FLr_INVERSE STATIC_CUBE( \ | ||
| 121 | 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2) | ||
| 122 | #define TRANS_CUBE_BUr STATIC_CUBE( \ | ||
| 123 | 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7) | ||
| 124 | #define TRANS_CUBE_BUr_INVERSE STATIC_CUBE( \ | ||
| 125 | 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4) | ||
| 126 | #define TRANS_CUBE_BRr STATIC_CUBE( \ | ||
| 127 | 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22) | ||
| 128 | #define TRANS_CUBE_BRr_INVERSE STATIC_CUBE( \ | ||
| 129 | 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0) | ||
| 130 | #define TRANS_CUBE_BDr STATIC_CUBE( \ | ||
| 131 | 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5) | ||
| 132 | #define TRANS_CUBE_BDr_INVERSE STATIC_CUBE( \ | ||
| 133 | 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5) | ||
| 134 | #define TRANS_CUBE_BLr STATIC_CUBE( \ | ||
| 135 | 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20) | ||
| 136 | #define TRANS_CUBE_BLr_INVERSE STATIC_CUBE( \ | ||
| 137 | 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1) | ||
| 138 | #define TRANS_CUBE_UFm STATIC_CUBE( \ | ||
| 139 | 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10) | ||
| 140 | #define TRANS_CUBE_UFm_INVERSE STATIC_CUBE( \ | ||
| 141 | 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10) | ||
| 142 | #define TRANS_CUBE_ULm STATIC_CUBE( \ | ||
| 143 | 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25) | ||
| 144 | #define TRANS_CUBE_ULm_INVERSE STATIC_CUBE( \ | ||
| 145 | 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25) | ||
| 146 | #define TRANS_CUBE_UBm STATIC_CUBE( \ | ||
| 147 | 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8) | ||
| 148 | #define TRANS_CUBE_UBm_INVERSE STATIC_CUBE( \ | ||
| 149 | 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8) | ||
| 150 | #define TRANS_CUBE_URm STATIC_CUBE( \ | ||
| 151 | 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27) | ||
| 152 | #define TRANS_CUBE_URm_INVERSE STATIC_CUBE( \ | ||
| 153 | 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27) | ||
| 154 | #define TRANS_CUBE_DFm STATIC_CUBE( \ | ||
| 155 | 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11) | ||
| 156 | #define TRANS_CUBE_DFm_INVERSE STATIC_CUBE( \ | ||
| 157 | 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11) | ||
| 158 | #define TRANS_CUBE_DLm STATIC_CUBE( \ | ||
| 159 | 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26) | ||
| 160 | #define TRANS_CUBE_DLm_INVERSE STATIC_CUBE( \ | ||
| 161 | 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24) | ||
| 162 | #define TRANS_CUBE_DBm STATIC_CUBE( \ | ||
| 163 | 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9) | ||
| 164 | #define TRANS_CUBE_DBm_INVERSE STATIC_CUBE( \ | ||
| 165 | 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9) | ||
| 166 | #define TRANS_CUBE_DRm STATIC_CUBE( \ | ||
| 167 | 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24) | ||
| 168 | #define TRANS_CUBE_DRm_INVERSE STATIC_CUBE( \ | ||
| 169 | 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26) | ||
| 170 | #define TRANS_CUBE_RUm STATIC_CUBE( \ | ||
| 171 | 68, 71, 69, 70, 33, 34, 32, 35, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3) | ||
| 172 | #define TRANS_CUBE_RUm_INVERSE STATIC_CUBE( \ | ||
| 173 | 70, 68, 69, 71, 32, 34, 35, 33, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22) | ||
| 174 | #define TRANS_CUBE_RFm STATIC_CUBE( \ | ||
| 175 | 34, 33, 32, 35, 68, 71, 70, 69, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18) | ||
| 176 | #define TRANS_CUBE_RFm_INVERSE STATIC_CUBE( \ | ||
| 177 | 66, 65, 64, 67, 36, 39, 38, 37, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18) | ||
| 178 | #define TRANS_CUBE_RDm STATIC_CUBE( \ | ||
| 179 | 71, 68, 70, 69, 34, 33, 35, 32, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1) | ||
| 180 | #define TRANS_CUBE_RDm_INVERSE STATIC_CUBE( \ | ||
| 181 | 71, 69, 68, 70, 33, 35, 34, 32, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23) | ||
| 182 | #define TRANS_CUBE_RBm STATIC_CUBE( \ | ||
| 183 | 33, 34, 35, 32, 71, 68, 69, 70, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16) | ||
| 184 | #define TRANS_CUBE_RBm_INVERSE STATIC_CUBE( \ | ||
| 185 | 67, 64, 65, 66, 37, 38, 39, 36, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19) | ||
| 186 | #define TRANS_CUBE_LUm STATIC_CUBE( \ | ||
| 187 | 69, 70, 68, 71, 32, 35, 33, 34, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2) | ||
| 188 | #define TRANS_CUBE_LUm_INVERSE STATIC_CUBE( \ | ||
| 189 | 68, 70, 71, 69, 34, 32, 33, 35, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20) | ||
| 190 | #define TRANS_CUBE_LFm STATIC_CUBE( \ | ||
| 191 | 32, 35, 34, 33, 70, 69, 68, 71, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17) | ||
| 192 | #define TRANS_CUBE_LFm_INVERSE STATIC_CUBE( \ | ||
| 193 | 64, 67, 66, 65, 38, 37, 36, 39, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17) | ||
| 194 | #define TRANS_CUBE_LDm STATIC_CUBE( \ | ||
| 195 | 70, 69, 71, 68, 35, 32, 34, 33, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0) | ||
| 196 | #define TRANS_CUBE_LDm_INVERSE STATIC_CUBE( \ | ||
| 197 | 69, 71, 70, 68, 35, 33, 32, 34, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21) | ||
| 198 | #define TRANS_CUBE_LBm STATIC_CUBE( \ | ||
| 199 | 35, 32, 33, 34, 69, 70, 71, 68, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19) | ||
| 200 | #define TRANS_CUBE_LBm_INVERSE STATIC_CUBE( \ | ||
| 201 | 65, 66, 67, 64, 39, 36, 37, 38, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16) | ||
| 202 | #define TRANS_CUBE_FUm STATIC_CUBE( \ | ||
| 203 | 64, 66, 65, 67, 36, 38, 37, 39, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7) | ||
| 204 | #define TRANS_CUBE_FUm_INVERSE STATIC_CUBE( \ | ||
| 205 | 32, 34, 33, 35, 68, 70, 69, 71, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7) | ||
| 206 | #define TRANS_CUBE_FRm STATIC_CUBE( \ | ||
| 207 | 36, 38, 39, 37, 66, 64, 65, 67, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20) | ||
| 208 | #define TRANS_CUBE_FRm_INVERSE STATIC_CUBE( \ | ||
| 209 | 37, 38, 36, 39, 64, 67, 65, 66, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2) | ||
| 210 | #define TRANS_CUBE_FDm STATIC_CUBE( \ | ||
| 211 | 66, 64, 67, 65, 38, 36, 39, 37, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5) | ||
| 212 | #define TRANS_CUBE_FDm_INVERSE STATIC_CUBE( \ | ||
| 213 | 33, 35, 32, 34, 69, 71, 68, 70, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6) | ||
| 214 | #define TRANS_CUBE_FLm STATIC_CUBE( \ | ||
| 215 | 38, 36, 37, 39, 64, 66, 67, 65, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22) | ||
| 216 | #define TRANS_CUBE_FLm_INVERSE STATIC_CUBE( \ | ||
| 217 | 36, 39, 37, 38, 65, 66, 64, 67, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3) | ||
| 218 | #define TRANS_CUBE_BUm STATIC_CUBE( \ | ||
| 219 | 65, 67, 64, 66, 37, 39, 36, 38, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6) | ||
| 220 | #define TRANS_CUBE_BUm_INVERSE STATIC_CUBE( \ | ||
| 221 | 34, 32, 35, 33, 70, 68, 71, 69, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5) | ||
| 222 | #define TRANS_CUBE_BRm STATIC_CUBE( \ | ||
| 223 | 39, 37, 36, 38, 65, 67, 66, 64, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23) | ||
| 224 | #define TRANS_CUBE_BRm_INVERSE STATIC_CUBE( \ | ||
| 225 | 39, 36, 38, 37, 66, 65, 67, 64, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1) | ||
| 226 | #define TRANS_CUBE_BDm STATIC_CUBE( \ | ||
| 227 | 67, 65, 66, 64, 39, 37, 38, 36, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4) | ||
| 228 | #define TRANS_CUBE_BDm_INVERSE STATIC_CUBE( \ | ||
| 229 | 35, 33, 34, 32, 71, 69, 70, 68, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4) | ||
| 230 | #define TRANS_CUBE_BLm STATIC_CUBE( \ | ||
| 231 | 37, 39, 38, 36, 67, 65, 64, 66, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21) | ||
| 232 | #define TRANS_CUBE_BLm_INVERSE STATIC_CUBE( \ | ||
| 233 | 38, 37, 39, 36, 67, 64, 66, 65, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0) | ||
| 234 | |||
| 235 | #define MOVE_U UINT8_C(0) | ||
| 236 | #define MOVE_U2 UINT8_C(1) | ||
| 237 | #define MOVE_U3 UINT8_C(2) | ||
| 238 | #define MOVE_D UINT8_C(3) | ||
| 239 | #define MOVE_D2 UINT8_C(4) | ||
| 240 | #define MOVE_D3 UINT8_C(5) | ||
| 241 | #define MOVE_R UINT8_C(6) | ||
| 242 | #define MOVE_R2 UINT8_C(7) | ||
| 243 | #define MOVE_R3 UINT8_C(8) | ||
| 244 | #define MOVE_L UINT8_C(9) | ||
| 245 | #define MOVE_L2 UINT8_C(10) | ||
| 246 | #define MOVE_L3 UINT8_C(11) | ||
| 247 | #define MOVE_F UINT8_C(12) | ||
| 248 | #define MOVE_F2 UINT8_C(13) | ||
| 249 | #define MOVE_F3 UINT8_C(14) | ||
| 250 | #define MOVE_B UINT8_C(15) | ||
| 251 | #define MOVE_B2 UINT8_C(16) | ||
| 252 | #define MOVE_B3 UINT8_C(17) | ||
| 253 | |||
| 254 | #define TRANS_UFr UINT8_C(0) | ||
| 255 | #define TRANS_ULr UINT8_C(1) | ||
| 256 | #define TRANS_UBr UINT8_C(2) | ||
| 257 | #define TRANS_URr UINT8_C(3) | ||
| 258 | #define TRANS_DFr UINT8_C(4) | ||
| 259 | #define TRANS_DLr UINT8_C(5) | ||
| 260 | #define TRANS_DBr UINT8_C(6) | ||
| 261 | #define TRANS_DRr UINT8_C(7) | ||
| 262 | #define TRANS_RUr UINT8_C(8) | ||
| 263 | #define TRANS_RFr UINT8_C(9) | ||
| 264 | #define TRANS_RDr UINT8_C(10) | ||
| 265 | #define TRANS_RBr UINT8_C(11) | ||
| 266 | #define TRANS_LUr UINT8_C(12) | ||
| 267 | #define TRANS_LFr UINT8_C(13) | ||
| 268 | #define TRANS_LDr UINT8_C(14) | ||
| 269 | #define TRANS_LBr UINT8_C(15) | ||
| 270 | #define TRANS_FUr UINT8_C(16) | ||
| 271 | #define TRANS_FRr UINT8_C(17) | ||
| 272 | #define TRANS_FDr UINT8_C(18) | ||
| 273 | #define TRANS_FLr UINT8_C(19) | ||
| 274 | #define TRANS_BUr UINT8_C(20) | ||
| 275 | #define TRANS_BRr UINT8_C(21) | ||
| 276 | #define TRANS_BDr UINT8_C(22) | ||
| 277 | #define TRANS_BLr UINT8_C(23) | ||
| 278 | |||
| 279 | #define TRANS_UFm UINT8_C(24) | ||
| 280 | #define TRANS_ULm UINT8_C(25) | ||
| 281 | #define TRANS_UBm UINT8_C(26) | ||
| 282 | #define TRANS_URm UINT8_C(27) | ||
| 283 | #define TRANS_DFm UINT8_C(28) | ||
| 284 | #define TRANS_DLm UINT8_C(29) | ||
| 285 | #define TRANS_DBm UINT8_C(30) | ||
| 286 | #define TRANS_DRm UINT8_C(31) | ||
| 287 | #define TRANS_RUm UINT8_C(32) | ||
| 288 | #define TRANS_RFm UINT8_C(33) | ||
| 289 | #define TRANS_RDm UINT8_C(34) | ||
| 290 | #define TRANS_RBm UINT8_C(35) | ||
| 291 | #define TRANS_LUm UINT8_C(36) | ||
| 292 | #define TRANS_LFm UINT8_C(37) | ||
| 293 | #define TRANS_LDm UINT8_C(38) | ||
| 294 | #define TRANS_LBm UINT8_C(39) | ||
| 295 | #define TRANS_FUm UINT8_C(40) | ||
| 296 | #define TRANS_FRm UINT8_C(41) | ||
| 297 | #define TRANS_FDm UINT8_C(42) | ||
| 298 | #define TRANS_FLm UINT8_C(43) | ||
| 299 | #define TRANS_BUm UINT8_C(44) | ||
| 300 | #define TRANS_BRm UINT8_C(45) | ||
| 301 | #define TRANS_BDm UINT8_C(46) | ||
| 302 | #define TRANS_BLm UINT8_C(47) | ||
| 303 | |||
| 304 | #define AXIS_UD UINT8_C(0) | ||
| 305 | #define AXIS_RL UINT8_C(1) | ||
| 306 | #define AXIS_FB UINT8_C(2) | ||
| 307 | |||
| 308 | #define NMOVES (1+MOVE_B3) | ||
| 309 | #define NTRANS (1+TRANS_BLm) | ||
| 310 | |||
| 311 | #define MM_ALLMOVES UINT32_C(0x3FFFF) | ||
| 312 | #define MM_NOHALFTURNS UINT32_C(0x2DB6D) | ||
| 313 | #define MM_SINGLE(m) (UINT32_C(1) << (uint32_t)(m)) | ||
| 314 | #define MM_FACE(m) (UINT32_C(7) << (uint32_t)(m)) | ||
| 315 | #define MM_EO (\ | ||
| 316 | MM_FACE(MOVE_U) | MM_FACE(MOVE_D) |\ | ||
| 317 | MM_FACE(MOVE_R) | MM_FACE(MOVE_L) |\ | ||
| 318 | MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2)) | ||
| 319 | #define MM_DR (\ | ||
| 320 | MM_FACE(MOVE_U) | MM_FACE(MOVE_D) |\ | ||
| 321 | MM_SINGLE(MOVE_R2) | MM_SINGLE(MOVE_L2) |\ | ||
| 322 | MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2)) | ||
| 323 | #define MM_HTR (MM_ALLMOVES & ~MM_NOHALFTURNS) | ||
| 324 | |||
| 325 | #define TM_ALLTRANS UINT64_C(0xFFFFFFFFFFFF) | ||
| 326 | #define TM_SINGLE(t) (UINT64_C(1) << (uint64_t)(t)) | ||
| 327 | #define TM_UDRLFIX (\ | ||
| 328 | TM_SINGLE(TRANS_UFr) | TM_SINGLE(TRANS_UBr) | TM_SINGLE(TRANS_UFm) | \ | ||
| 329 | TM_SINGLE(TRANS_UBm) | TM_SINGLE(TRANS_DFr) | TM_SINGLE(TRANS_DBr) | \ | ||
| 330 | TM_SINGLE(TRANS_DFm) | TM_SINGLE(TRANS_DBm)) | ||
| 331 | #define TM_UDFIX (\ | ||
| 332 | TM_SINGLE(TRANS_UFr) | TM_SINGLE(TRANS_UBr) | TM_SINGLE(TRANS_URr) | \ | ||
| 333 | TM_SINGLE(TRANS_ULr) | TM_SINGLE(TRANS_UFm) | TM_SINGLE(TRANS_UBm) | \ | ||
| 334 | TM_SINGLE(TRANS_URm) | TM_SINGLE(TRANS_ULm) | TM_SINGLE(TRANS_DFr) | \ | ||
| 335 | TM_SINGLE(TRANS_DBr) | TM_SINGLE(TRANS_DRr) | TM_SINGLE(TRANS_DLr) | \ | ||
| 336 | TM_SINGLE(TRANS_DFm) | TM_SINGLE(TRANS_DBm) | TM_SINGLE(TRANS_DRm) | \ | ||
| 337 | TM_SINGLE(TRANS_DLm)) | ||
| 338 | |||
| 339 | #define CORNER_UFR UINT8_C(0) | ||
| 340 | #define CORNER_UBL UINT8_C(1) | ||
| 341 | #define CORNER_DFL UINT8_C(2) | ||
| 342 | #define CORNER_DBR UINT8_C(3) | ||
| 343 | #define CORNER_UFL UINT8_C(4) | ||
| 344 | #define CORNER_UBR UINT8_C(5) | ||
| 345 | #define CORNER_DFR UINT8_C(6) | ||
| 346 | #define CORNER_DBL UINT8_C(7) | ||
| 347 | |||
| 348 | #define EDGE_UF UINT8_C(0) | ||
| 349 | #define EDGE_UB UINT8_C(1) | ||
| 350 | #define EDGE_DB UINT8_C(2) | ||
| 351 | #define EDGE_DF UINT8_C(3) | ||
| 352 | #define EDGE_UR UINT8_C(4) | ||
| 353 | #define EDGE_UL UINT8_C(5) | ||
| 354 | #define EDGE_DL UINT8_C(6) | ||
| 355 | #define EDGE_DR UINT8_C(7) | ||
| 356 | #define EDGE_FR UINT8_C(8) | ||
| 357 | #define EDGE_FL UINT8_C(9) | ||
| 358 | #define EDGE_BL UINT8_C(10) | ||
| 359 | #define EDGE_BR UINT8_C(11) | ||
| 360 | |||
| 361 | #define ORIENTATION_UF UINT8_C(0) | ||
| 362 | #define ORIENTATION_UR UINT8_C(1) | ||
| 363 | #define ORIENTATION_UB UINT8_C(2) | ||
| 364 | #define ORIENTATION_UL UINT8_C(3) | ||
| 365 | #define ORIENTATION_DF UINT8_C(4) | ||
| 366 | #define ORIENTATION_DR UINT8_C(5) | ||
| 367 | #define ORIENTATION_DB UINT8_C(6) | ||
| 368 | #define ORIENTATION_DL UINT8_C(7) | ||
| 369 | #define ORIENTATION_RF UINT8_C(8) | ||
| 370 | #define ORIENTATION_RD UINT8_C(9) | ||
| 371 | #define ORIENTATION_RB UINT8_C(10) | ||
| 372 | #define ORIENTATION_RU UINT8_C(11) | ||
| 373 | #define ORIENTATION_LF UINT8_C(12) | ||
| 374 | #define ORIENTATION_LD UINT8_C(13) | ||
| 375 | #define ORIENTATION_LB UINT8_C(14) | ||
| 376 | #define ORIENTATION_LU UINT8_C(15) | ||
| 377 | #define ORIENTATION_FD UINT8_C(16) | ||
| 378 | #define ORIENTATION_FR UINT8_C(17) | ||
| 379 | #define ORIENTATION_FU UINT8_C(18) | ||
| 380 | #define ORIENTATION_FL UINT8_C(19) | ||
| 381 | #define ORIENTATION_BD UINT8_C(20) | ||
| 382 | #define ORIENTATION_BR UINT8_C(21) | ||
| 383 | #define ORIENTATION_BU UINT8_C(22) | ||
| 384 | #define ORIENTATION_BL UINT8_C(23) | ||
| 385 | |||
| 386 | STATIC const uint32_t allowedmask[] = { | ||
| 387 | UINT32_C(0x3FFF8), | ||
| 388 | UINT32_C(0x3FFC0), | ||
| 389 | UINT32_C(0x3FE3F), | ||
| 390 | UINT32_C(0x3F03F), | ||
| 391 | UINT32_C(0x38FFF), | ||
| 392 | UINT32_C(0x00FFF) | ||
| 393 | }; | ||
| 394 | |||
| 395 | STATIC const char *cornerstr[] = { | ||
| 396 | [CORNER_UFR] = "UFR", | ||
| 397 | [CORNER_UBL] = "UBL", | ||
| 398 | [CORNER_DFL] = "DFL", | ||
| 399 | [CORNER_DBR] = "DBR", | ||
| 400 | [CORNER_UFL] = "UFL", | ||
| 401 | [CORNER_UBR] = "UBR", | ||
| 402 | [CORNER_DFR] = "DFR", | ||
| 403 | [CORNER_DBL] = "DBL" | ||
| 404 | }; | ||
| 405 | |||
| 406 | STATIC const char *cornerstralt[] = { | ||
| 407 | [CORNER_UFR] = "URF", | ||
| 408 | [CORNER_UBL] = "ULB", | ||
| 409 | [CORNER_DFL] = "DLF", | ||
| 410 | [CORNER_DBR] = "DRB", | ||
| 411 | [CORNER_UFL] = "ULF", | ||
| 412 | [CORNER_UBR] = "URB", | ||
| 413 | [CORNER_DFR] = "DRF", | ||
| 414 | [CORNER_DBL] = "DLB" | ||
| 415 | }; | ||
| 416 | |||
| 417 | STATIC const char *edgestr[] = { | ||
| 418 | [EDGE_UF] = "UF", | ||
| 419 | [EDGE_UB] = "UB", | ||
| 420 | [EDGE_DB] = "DB", | ||
| 421 | [EDGE_DF] = "DF", | ||
| 422 | [EDGE_UR] = "UR", | ||
| 423 | [EDGE_UL] = "UL", | ||
| 424 | [EDGE_DL] = "DL", | ||
| 425 | [EDGE_DR] = "DR", | ||
| 426 | [EDGE_FR] = "FR", | ||
| 427 | [EDGE_FL] = "FL", | ||
| 428 | [EDGE_BL] = "BL", | ||
| 429 | [EDGE_BR] = "BR" | ||
| 430 | }; | ||
| 431 | |||
| 432 | STATIC const char *movestr[] = { | ||
| 433 | [MOVE_U] = "U", | ||
| 434 | [MOVE_U2] = "U2", | ||
| 435 | [MOVE_U3] = "U'", | ||
| 436 | [MOVE_D] = "D", | ||
| 437 | [MOVE_D2] = "D2", | ||
| 438 | [MOVE_D3] = "D'", | ||
| 439 | [MOVE_R] = "R", | ||
| 440 | [MOVE_R2] = "R2", | ||
| 441 | [MOVE_R3] = "R'", | ||
| 442 | [MOVE_L] = "L", | ||
| 443 | [MOVE_L2] = "L2", | ||
| 444 | [MOVE_L3] = "L'", | ||
| 445 | [MOVE_F] = "F", | ||
| 446 | [MOVE_F2] = "F2", | ||
| 447 | [MOVE_F3] = "F'", | ||
| 448 | [MOVE_B] = "B", | ||
| 449 | [MOVE_B2] = "B2", | ||
| 450 | [MOVE_B3] = "B'", | ||
| 451 | }; | ||
| 452 | |||
| 453 | STATIC const char *transstr[] = { | ||
| 454 | [TRANS_UFr] = "rotation UF", | ||
| 455 | [TRANS_UFm] = "mirrored UF", | ||
| 456 | [TRANS_ULr] = "rotation UL", | ||
| 457 | [TRANS_ULm] = "mirrored UL", | ||
| 458 | [TRANS_UBr] = "rotation UB", | ||
| 459 | [TRANS_UBm] = "mirrored UB", | ||
| 460 | [TRANS_URr] = "rotation UR", | ||
| 461 | [TRANS_URm] = "mirrored UR", | ||
| 462 | [TRANS_DFr] = "rotation DF", | ||
| 463 | [TRANS_DFm] = "mirrored DF", | ||
| 464 | [TRANS_DLr] = "rotation DL", | ||
| 465 | [TRANS_DLm] = "mirrored DL", | ||
| 466 | [TRANS_DBr] = "rotation DB", | ||
| 467 | [TRANS_DBm] = "mirrored DB", | ||
| 468 | [TRANS_DRr] = "rotation DR", | ||
| 469 | [TRANS_DRm] = "mirrored DR", | ||
| 470 | [TRANS_RUr] = "rotation RU", | ||
| 471 | [TRANS_RUm] = "mirrored RU", | ||
| 472 | [TRANS_RFr] = "rotation RF", | ||
| 473 | [TRANS_RFm] = "mirrored RF", | ||
| 474 | [TRANS_RDr] = "rotation RD", | ||
| 475 | [TRANS_RDm] = "mirrored RD", | ||
| 476 | [TRANS_RBr] = "rotation RB", | ||
| 477 | [TRANS_RBm] = "mirrored RB", | ||
| 478 | [TRANS_LUr] = "rotation LU", | ||
| 479 | [TRANS_LUm] = "mirrored LU", | ||
| 480 | [TRANS_LFr] = "rotation LF", | ||
| 481 | [TRANS_LFm] = "mirrored LF", | ||
| 482 | [TRANS_LDr] = "rotation LD", | ||
| 483 | [TRANS_LDm] = "mirrored LD", | ||
| 484 | [TRANS_LBr] = "rotation LB", | ||
| 485 | [TRANS_LBm] = "mirrored LB", | ||
| 486 | [TRANS_FUr] = "rotation FU", | ||
| 487 | [TRANS_FUm] = "mirrored FU", | ||
| 488 | [TRANS_FRr] = "rotation FR", | ||
| 489 | [TRANS_FRm] = "mirrored FR", | ||
| 490 | [TRANS_FDr] = "rotation FD", | ||
| 491 | [TRANS_FDm] = "mirrored FD", | ||
| 492 | [TRANS_FLr] = "rotation FL", | ||
| 493 | [TRANS_FLm] = "mirrored FL", | ||
| 494 | [TRANS_BUr] = "rotation BU", | ||
| 495 | [TRANS_BUm] = "mirrored BU", | ||
| 496 | [TRANS_BRr] = "rotation BR", | ||
| 497 | [TRANS_BRm] = "mirrored BR", | ||
| 498 | [TRANS_BDr] = "rotation BD", | ||
| 499 | [TRANS_BDm] = "mirrored BD", | ||
| 500 | [TRANS_BLr] = "rotation BL", | ||
| 501 | [TRANS_BLm] = "mirrored BL", | ||
| 502 | }; | ||
| 503 | |||
| 504 | static uint8_t inverse_trans_table[] = { | ||
| 505 | [TRANS_UFr] = TRANS_UFr, | ||
| 506 | [TRANS_UFm] = TRANS_UFm, | ||
| 507 | [TRANS_ULr] = TRANS_URr, | ||
| 508 | [TRANS_ULm] = TRANS_ULm, | ||
| 509 | [TRANS_UBr] = TRANS_UBr, | ||
| 510 | [TRANS_UBm] = TRANS_UBm, | ||
| 511 | [TRANS_URr] = TRANS_ULr, | ||
| 512 | [TRANS_URm] = TRANS_URm, | ||
| 513 | [TRANS_DFr] = TRANS_DFr, | ||
| 514 | [TRANS_DFm] = TRANS_DFm, | ||
| 515 | [TRANS_DLr] = TRANS_DLr, | ||
| 516 | [TRANS_DLm] = TRANS_DRm, | ||
| 517 | [TRANS_DBr] = TRANS_DBr, | ||
| 518 | [TRANS_DBm] = TRANS_DBm, | ||
| 519 | [TRANS_DRr] = TRANS_DRr, | ||
| 520 | [TRANS_DRm] = TRANS_DLm, | ||
| 521 | [TRANS_RUr] = TRANS_FRr, | ||
| 522 | [TRANS_RUm] = TRANS_FLm, | ||
| 523 | [TRANS_RFr] = TRANS_LFr, | ||
| 524 | [TRANS_RFm] = TRANS_RFm, | ||
| 525 | [TRANS_RDr] = TRANS_BLr, | ||
| 526 | [TRANS_RDm] = TRANS_BRm, | ||
| 527 | [TRANS_RBr] = TRANS_RBr, | ||
| 528 | [TRANS_RBm] = TRANS_LBm, | ||
| 529 | [TRANS_LUr] = TRANS_FLr, | ||
| 530 | [TRANS_LUm] = TRANS_FRm, | ||
| 531 | [TRANS_LFr] = TRANS_RFr, | ||
| 532 | [TRANS_LFm] = TRANS_LFm, | ||
| 533 | [TRANS_LDr] = TRANS_BRr, | ||
| 534 | [TRANS_LDm] = TRANS_BLm, | ||
| 535 | [TRANS_LBr] = TRANS_LBr, | ||
| 536 | [TRANS_LBm] = TRANS_RBm, | ||
| 537 | [TRANS_FUr] = TRANS_FUr, | ||
| 538 | [TRANS_FUm] = TRANS_FUm, | ||
| 539 | [TRANS_FRr] = TRANS_RUr, | ||
| 540 | [TRANS_FRm] = TRANS_LUm, | ||
| 541 | [TRANS_FDr] = TRANS_BUr, | ||
| 542 | [TRANS_FDm] = TRANS_BUm, | ||
| 543 | [TRANS_FLr] = TRANS_LUr, | ||
| 544 | [TRANS_FLm] = TRANS_RUm, | ||
| 545 | [TRANS_BUr] = TRANS_FDr, | ||
| 546 | [TRANS_BUm] = TRANS_FDm, | ||
| 547 | [TRANS_BRr] = TRANS_LDr, | ||
| 548 | [TRANS_BRm] = TRANS_RDm, | ||
| 549 | [TRANS_BDr] = TRANS_BDr, | ||
| 550 | [TRANS_BDm] = TRANS_BDm, | ||
| 551 | [TRANS_BLr] = TRANS_RDr, | ||
| 552 | [TRANS_BLm] = TRANS_LDm, | ||
| 553 | }; | ||
| 554 | |||
| 555 | static uint8_t trans_move_table[][3] = { | ||
| 556 | [TRANS_UFr] = { MOVE_U, MOVE_R, MOVE_F }, | ||
| 557 | [TRANS_UFm] = { MOVE_U, MOVE_L, MOVE_F }, | ||
| 558 | [TRANS_ULr] = { MOVE_U, MOVE_F, MOVE_L }, | ||
| 559 | [TRANS_ULm] = { MOVE_U, MOVE_F, MOVE_R }, | ||
| 560 | [TRANS_UBr] = { MOVE_U, MOVE_L, MOVE_B }, | ||
| 561 | [TRANS_UBm] = { MOVE_U, MOVE_R, MOVE_B }, | ||
| 562 | [TRANS_URr] = { MOVE_U, MOVE_B, MOVE_R }, | ||
| 563 | [TRANS_URm] = { MOVE_U, MOVE_B, MOVE_L }, | ||
| 564 | [TRANS_DFr] = { MOVE_D, MOVE_L, MOVE_F }, | ||
| 565 | [TRANS_DFm] = { MOVE_D, MOVE_R, MOVE_F }, | ||
| 566 | [TRANS_DLr] = { MOVE_D, MOVE_B, MOVE_L }, | ||
| 567 | [TRANS_DLm] = { MOVE_D, MOVE_B, MOVE_R }, | ||
| 568 | [TRANS_DBr] = { MOVE_D, MOVE_R, MOVE_B }, | ||
| 569 | [TRANS_DBm] = { MOVE_D, MOVE_L, MOVE_B }, | ||
| 570 | [TRANS_DRr] = { MOVE_D, MOVE_F, MOVE_R }, | ||
| 571 | [TRANS_DRm] = { MOVE_D, MOVE_F, MOVE_L }, | ||
| 572 | [TRANS_RUr] = { MOVE_R, MOVE_F, MOVE_U }, | ||
| 573 | [TRANS_RUm] = { MOVE_L, MOVE_F, MOVE_U }, | ||
| 574 | [TRANS_RFr] = { MOVE_R, MOVE_D, MOVE_F }, | ||
| 575 | [TRANS_RFm] = { MOVE_L, MOVE_D, MOVE_F }, | ||
| 576 | [TRANS_RDr] = { MOVE_R, MOVE_B, MOVE_D }, | ||
| 577 | [TRANS_RDm] = { MOVE_L, MOVE_B, MOVE_D }, | ||
| 578 | [TRANS_RBr] = { MOVE_R, MOVE_U, MOVE_B }, | ||
| 579 | [TRANS_RBm] = { MOVE_L, MOVE_U, MOVE_B }, | ||
| 580 | [TRANS_LUr] = { MOVE_L, MOVE_B, MOVE_U }, | ||
| 581 | [TRANS_LUm] = { MOVE_R, MOVE_B, MOVE_U }, | ||
| 582 | [TRANS_LFr] = { MOVE_L, MOVE_U, MOVE_F }, | ||
| 583 | [TRANS_LFm] = { MOVE_R, MOVE_U, MOVE_F }, | ||
| 584 | [TRANS_LDr] = { MOVE_L, MOVE_F, MOVE_D }, | ||
| 585 | [TRANS_LDm] = { MOVE_R, MOVE_F, MOVE_D }, | ||
| 586 | [TRANS_LBr] = { MOVE_L, MOVE_D, MOVE_B }, | ||
| 587 | [TRANS_LBm] = { MOVE_R, MOVE_D, MOVE_B }, | ||
| 588 | [TRANS_FUr] = { MOVE_F, MOVE_L, MOVE_U }, | ||
| 589 | [TRANS_FUm] = { MOVE_F, MOVE_R, MOVE_U }, | ||
| 590 | [TRANS_FRr] = { MOVE_F, MOVE_U, MOVE_R }, | ||
| 591 | [TRANS_FRm] = { MOVE_F, MOVE_U, MOVE_L }, | ||
| 592 | [TRANS_FDr] = { MOVE_F, MOVE_R, MOVE_D }, | ||
| 593 | [TRANS_FDm] = { MOVE_F, MOVE_L, MOVE_D }, | ||
| 594 | [TRANS_FLr] = { MOVE_F, MOVE_D, MOVE_L }, | ||
| 595 | [TRANS_FLm] = { MOVE_F, MOVE_D, MOVE_R }, | ||
| 596 | [TRANS_BUr] = { MOVE_B, MOVE_R, MOVE_U }, | ||
| 597 | [TRANS_BUm] = { MOVE_B, MOVE_L, MOVE_U }, | ||
| 598 | [TRANS_BRr] = { MOVE_B, MOVE_D, MOVE_R }, | ||
| 599 | [TRANS_BRm] = { MOVE_B, MOVE_D, MOVE_L }, | ||
| 600 | [TRANS_BDr] = { MOVE_B, MOVE_L, MOVE_D }, | ||
| 601 | [TRANS_BDm] = { MOVE_B, MOVE_R, MOVE_D }, | ||
| 602 | [TRANS_BLr] = { MOVE_B, MOVE_U, MOVE_L }, | ||
| 603 | [TRANS_BLm] = { MOVE_B, MOVE_U, MOVE_R }, | ||
| 604 | }; | ||
| 605 | |||
| 606 | static uint8_t orientation_transition_table[][3] = { | ||
| 607 | [ORIENTATION_UF] = { ORIENTATION_FD, ORIENTATION_UR, ORIENTATION_LF }, | ||
| 608 | [ORIENTATION_UR] = { ORIENTATION_RD, ORIENTATION_UB, ORIENTATION_FR }, | ||
| 609 | [ORIENTATION_UB] = { ORIENTATION_BD, ORIENTATION_UL, ORIENTATION_RB }, | ||
| 610 | [ORIENTATION_UL] = { ORIENTATION_LD, ORIENTATION_UF, ORIENTATION_BL }, | ||
| 611 | [ORIENTATION_DF] = { ORIENTATION_FU, ORIENTATION_DL, ORIENTATION_RF }, | ||
| 612 | [ORIENTATION_DR] = { ORIENTATION_RU, ORIENTATION_DF, ORIENTATION_BR }, | ||
| 613 | [ORIENTATION_DB] = { ORIENTATION_BU, ORIENTATION_DR, ORIENTATION_LB }, | ||
| 614 | [ORIENTATION_DL] = { ORIENTATION_LU, ORIENTATION_DB, ORIENTATION_FL }, | ||
| 615 | [ORIENTATION_RF] = { ORIENTATION_FL, ORIENTATION_RD, ORIENTATION_UF }, | ||
| 616 | [ORIENTATION_RD] = { ORIENTATION_DL, ORIENTATION_RB, ORIENTATION_FD }, | ||
| 617 | [ORIENTATION_RB] = { ORIENTATION_BL, ORIENTATION_RU, ORIENTATION_DB }, | ||
| 618 | [ORIENTATION_RU] = { ORIENTATION_UL, ORIENTATION_RF, ORIENTATION_BU }, | ||
| 619 | [ORIENTATION_LF] = { ORIENTATION_FR, ORIENTATION_LU, ORIENTATION_DF }, | ||
| 620 | [ORIENTATION_LD] = { ORIENTATION_DR, ORIENTATION_LB, ORIENTATION_BD }, | ||
| 621 | [ORIENTATION_LB] = { ORIENTATION_BR, ORIENTATION_LD, ORIENTATION_UB }, | ||
| 622 | [ORIENTATION_LU] = { ORIENTATION_UR, ORIENTATION_LF, ORIENTATION_FU }, | ||
| 623 | [ORIENTATION_FD] = { ORIENTATION_DB, ORIENTATION_FR, ORIENTATION_LD }, | ||
| 624 | [ORIENTATION_FR] = { ORIENTATION_RB, ORIENTATION_FU, ORIENTATION_DR }, | ||
| 625 | [ORIENTATION_FU] = { ORIENTATION_UB, ORIENTATION_FL, ORIENTATION_RU }, | ||
| 626 | [ORIENTATION_FL] = { ORIENTATION_LB, ORIENTATION_FD, ORIENTATION_UL }, | ||
| 627 | [ORIENTATION_BD] = { ORIENTATION_DF, ORIENTATION_BL, ORIENTATION_RD }, | ||
| 628 | [ORIENTATION_BR] = { ORIENTATION_RF, ORIENTATION_BU, ORIENTATION_UR }, | ||
| 629 | [ORIENTATION_BU] = { ORIENTATION_UF, ORIENTATION_BR, ORIENTATION_LU }, | ||
| 630 | [ORIENTATION_BL] = { ORIENTATION_LF, ORIENTATION_BD, ORIENTATION_DL }, | ||
| 631 | }; | ||
| 632 | |||
| 633 | static struct { | ||
| 634 | uint8_t moves[3]; | ||
| 635 | uint8_t rotations[6]; | ||
| 636 | } equivalent_move_table[] = { | ||
| 637 | [MOVE_U] = { { MOVE_U, UINT8_MAX }, {UINT8_MAX} }, | ||
| 638 | [MOVE_U2] = { { MOVE_U2, UINT8_MAX }, {UINT8_MAX} }, | ||
| 639 | [MOVE_U3] = { { MOVE_U3, UINT8_MAX }, {UINT8_MAX} }, | ||
| 640 | [MOVE_D] = { { MOVE_D, UINT8_MAX }, {UINT8_MAX} }, | ||
| 641 | [MOVE_D2] = { { MOVE_D2, UINT8_MAX }, {UINT8_MAX} }, | ||
| 642 | [MOVE_D3] = { { MOVE_D3, UINT8_MAX }, {UINT8_MAX} }, | ||
| 643 | [MOVE_R] = { { MOVE_R, UINT8_MAX }, {UINT8_MAX} }, | ||
| 644 | [MOVE_R2] = { { MOVE_R2, UINT8_MAX }, {UINT8_MAX} }, | ||
| 645 | [MOVE_R3] = { { MOVE_R3, UINT8_MAX }, {UINT8_MAX} }, | ||
| 646 | [MOVE_L] = { { MOVE_L, UINT8_MAX }, {UINT8_MAX} }, | ||
| 647 | [MOVE_L2] = { { MOVE_L2, UINT8_MAX }, {UINT8_MAX} }, | ||
| 648 | [MOVE_L3] = { { MOVE_L3, UINT8_MAX }, {UINT8_MAX} }, | ||
| 649 | [MOVE_F] = { { MOVE_F, UINT8_MAX }, {UINT8_MAX} }, | ||
| 650 | [MOVE_F2] = { { MOVE_F2, UINT8_MAX }, {UINT8_MAX} }, | ||
| 651 | [MOVE_F3] = { { MOVE_F3, UINT8_MAX }, {UINT8_MAX} }, | ||
| 652 | [MOVE_B] = { { MOVE_B, UINT8_MAX }, {UINT8_MAX} }, | ||
| 653 | [MOVE_B2] = { { MOVE_B2, UINT8_MAX }, {UINT8_MAX} }, | ||
| 654 | [MOVE_B3] = { { MOVE_B3, UINT8_MAX }, {UINT8_MAX} }, | ||
| 655 | }; | ||
diff --git a/src/core/core.h b/src/core/core.h index c211788..b56106e 100644 --- a/src/core/core.h +++ b/src/core/core.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | #include "core_types.h" | 1 | #include "core_types.h" |
| 2 | #include "constant_cubes.h" | 2 | #include "constants.h" |
| 3 | #include "cube.h" | 3 | #include "cube.h" |
| 4 | #include "moves.h" | 4 | #include "moves.h" |
| 5 | #include "transform.h" | 5 | #include "transform.h" |
diff --git a/src/core/cube.h b/src/core/cube.h index 76c3ff1..91bb284 100644 --- a/src/core/cube.h +++ b/src/core/cube.h | |||
| @@ -1,7 +1,3 @@ | |||
| 1 | #define ZERO_ORIENTED_CUBE ((oriented_cube_t) {0}) | ||
| 2 | #define SOLVED_ORIENTED_CUBE \ | ||
| 3 | ((oriented_cube_t) { .cube = SOLVED_CUBE, .orientation = 0 }) | ||
| 4 | |||
| 5 | STATIC oriented_cube_t solvedcube(void); | 1 | STATIC oriented_cube_t solvedcube(void); |
| 6 | STATIC cube_t cubefromarray(uint8_t [static 8], uint8_t [static 12]); | 2 | STATIC cube_t cubefromarray(uint8_t [static 8], uint8_t [static 12]); |
| 7 | STATIC bool isconsistent(oriented_cube_t); | 3 | STATIC bool isconsistent(oriented_cube_t); |
diff --git a/src/utils/constants.h b/src/utils/constants.h index 5ccff06..da0a813 100644 --- a/src/utils/constants.h +++ b/src/utils/constants.h | |||
| @@ -9,6 +9,8 @@ | |||
| 9 | #define COMB_12_4 INT64_C(495) | 9 | #define COMB_12_4 INT64_C(495) |
| 10 | #define COMB_8_4 INT64_C(70) | 10 | #define COMB_8_4 INT64_C(70) |
| 11 | 11 | ||
| 12 | #define UINT8_ERROR UINT8_MAX | ||
| 13 | |||
| 12 | STATIC int64_t binomial[12][12] = { | 14 | STATIC int64_t binomial[12][12] = { |
| 13 | {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | 15 | {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 14 | {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | 16 | {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| @@ -23,364 +25,3 @@ STATIC int64_t binomial[12][12] = { | |||
| 23 | {1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1, 0}, | 25 | {1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1, 0}, |
| 24 | {1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1}, | 26 | {1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1}, |
| 25 | }; | 27 | }; |
| 26 | |||
| 27 | #define MOVE_U UINT8_C(0) | ||
| 28 | #define MOVE_U2 UINT8_C(1) | ||
| 29 | #define MOVE_U3 UINT8_C(2) | ||
| 30 | #define MOVE_D UINT8_C(3) | ||
| 31 | #define MOVE_D2 UINT8_C(4) | ||
| 32 | #define MOVE_D3 UINT8_C(5) | ||
| 33 | #define MOVE_R UINT8_C(6) | ||
| 34 | #define MOVE_R2 UINT8_C(7) | ||
| 35 | #define MOVE_R3 UINT8_C(8) | ||
| 36 | #define MOVE_L UINT8_C(9) | ||
| 37 | #define MOVE_L2 UINT8_C(10) | ||
| 38 | #define MOVE_L3 UINT8_C(11) | ||
| 39 | #define MOVE_F UINT8_C(12) | ||
| 40 | #define MOVE_F2 UINT8_C(13) | ||
| 41 | #define MOVE_F3 UINT8_C(14) | ||
| 42 | #define MOVE_B UINT8_C(15) | ||
| 43 | #define MOVE_B2 UINT8_C(16) | ||
| 44 | #define MOVE_B3 UINT8_C(17) | ||
| 45 | |||
| 46 | #define TRANS_UFr UINT8_C(0) | ||
| 47 | #define TRANS_ULr UINT8_C(1) | ||
| 48 | #define TRANS_UBr UINT8_C(2) | ||
| 49 | #define TRANS_URr UINT8_C(3) | ||
| 50 | #define TRANS_DFr UINT8_C(4) | ||
| 51 | #define TRANS_DLr UINT8_C(5) | ||
| 52 | #define TRANS_DBr UINT8_C(6) | ||
| 53 | #define TRANS_DRr UINT8_C(7) | ||
| 54 | #define TRANS_RUr UINT8_C(8) | ||
| 55 | #define TRANS_RFr UINT8_C(9) | ||
| 56 | #define TRANS_RDr UINT8_C(10) | ||
| 57 | #define TRANS_RBr UINT8_C(11) | ||
| 58 | #define TRANS_LUr UINT8_C(12) | ||
| 59 | #define TRANS_LFr UINT8_C(13) | ||
| 60 | #define TRANS_LDr UINT8_C(14) | ||
| 61 | #define TRANS_LBr UINT8_C(15) | ||
| 62 | #define TRANS_FUr UINT8_C(16) | ||
| 63 | #define TRANS_FRr UINT8_C(17) | ||
| 64 | #define TRANS_FDr UINT8_C(18) | ||
| 65 | #define TRANS_FLr UINT8_C(19) | ||
| 66 | #define TRANS_BUr UINT8_C(20) | ||
| 67 | #define TRANS_BRr UINT8_C(21) | ||
| 68 | #define TRANS_BDr UINT8_C(22) | ||
| 69 | #define TRANS_BLr UINT8_C(23) | ||
| 70 | |||
| 71 | #define TRANS_UFm UINT8_C(24) | ||
| 72 | #define TRANS_ULm UINT8_C(25) | ||
| 73 | #define TRANS_UBm UINT8_C(26) | ||
| 74 | #define TRANS_URm UINT8_C(27) | ||
| 75 | #define TRANS_DFm UINT8_C(28) | ||
| 76 | #define TRANS_DLm UINT8_C(29) | ||
| 77 | #define TRANS_DBm UINT8_C(30) | ||
| 78 | #define TRANS_DRm UINT8_C(31) | ||
| 79 | #define TRANS_RUm UINT8_C(32) | ||
| 80 | #define TRANS_RFm UINT8_C(33) | ||
| 81 | #define TRANS_RDm UINT8_C(34) | ||
| 82 | #define TRANS_RBm UINT8_C(35) | ||
| 83 | #define TRANS_LUm UINT8_C(36) | ||
| 84 | #define TRANS_LFm UINT8_C(37) | ||
| 85 | #define TRANS_LDm UINT8_C(38) | ||
| 86 | #define TRANS_LBm UINT8_C(39) | ||
| 87 | #define TRANS_FUm UINT8_C(40) | ||
| 88 | #define TRANS_FRm UINT8_C(41) | ||
| 89 | #define TRANS_FDm UINT8_C(42) | ||
| 90 | #define TRANS_FLm UINT8_C(43) | ||
| 91 | #define TRANS_BUm UINT8_C(44) | ||
| 92 | #define TRANS_BRm UINT8_C(45) | ||
| 93 | #define TRANS_BDm UINT8_C(46) | ||
| 94 | #define TRANS_BLm UINT8_C(47) | ||
| 95 | |||
| 96 | #define AXIS_UD UINT8_C(0) | ||
| 97 | #define AXIS_RL UINT8_C(1) | ||
| 98 | #define AXIS_FB UINT8_C(2) | ||
| 99 | |||
| 100 | #define NMOVES (1+MOVE_B3) | ||
| 101 | #define NTRANS (1+TRANS_BLm) | ||
| 102 | |||
| 103 | #define MM_ALLMOVES UINT32_C(0x3FFFF) | ||
| 104 | #define MM_NOHALFTURNS UINT32_C(0x2DB6D) | ||
| 105 | #define MM_SINGLE(m) (UINT32_C(1) << (uint32_t)(m)) | ||
| 106 | #define MM_FACE(m) (UINT32_C(7) << (uint32_t)(m)) | ||
| 107 | #define MM_EO (\ | ||
| 108 | MM_FACE(MOVE_U) | MM_FACE(MOVE_D) |\ | ||
| 109 | MM_FACE(MOVE_R) | MM_FACE(MOVE_L) |\ | ||
| 110 | MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2)) | ||
| 111 | #define MM_DR (\ | ||
| 112 | MM_FACE(MOVE_U) | MM_FACE(MOVE_D) |\ | ||
| 113 | MM_SINGLE(MOVE_R2) | MM_SINGLE(MOVE_L2) |\ | ||
| 114 | MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2)) | ||
| 115 | #define MM_HTR (MM_ALLMOVES & ~MM_NOHALFTURNS) | ||
| 116 | |||
| 117 | #define TM_ALLTRANS UINT64_C(0xFFFFFFFFFFFF) | ||
| 118 | #define TM_SINGLE(t) (UINT64_C(1) << (uint64_t)(t)) | ||
| 119 | #define TM_UDRLFIX (\ | ||
| 120 | TM_SINGLE(TRANS_UFr) | TM_SINGLE(TRANS_UBr) | TM_SINGLE(TRANS_UFm) | \ | ||
| 121 | TM_SINGLE(TRANS_UBm) | TM_SINGLE(TRANS_DFr) | TM_SINGLE(TRANS_DBr) | \ | ||
| 122 | TM_SINGLE(TRANS_DFm) | TM_SINGLE(TRANS_DBm)) | ||
| 123 | #define TM_UDFIX (\ | ||
| 124 | TM_SINGLE(TRANS_UFr) | TM_SINGLE(TRANS_UBr) | TM_SINGLE(TRANS_URr) | \ | ||
| 125 | TM_SINGLE(TRANS_ULr) | TM_SINGLE(TRANS_UFm) | TM_SINGLE(TRANS_UBm) | \ | ||
| 126 | TM_SINGLE(TRANS_URm) | TM_SINGLE(TRANS_ULm) | TM_SINGLE(TRANS_DFr) | \ | ||
| 127 | TM_SINGLE(TRANS_DBr) | TM_SINGLE(TRANS_DRr) | TM_SINGLE(TRANS_DLr) | \ | ||
| 128 | TM_SINGLE(TRANS_DFm) | TM_SINGLE(TRANS_DBm) | TM_SINGLE(TRANS_DRm) | \ | ||
| 129 | TM_SINGLE(TRANS_DLm)) | ||
| 130 | |||
| 131 | #define CORNER_UFR UINT8_C(0) | ||
| 132 | #define CORNER_UBL UINT8_C(1) | ||
| 133 | #define CORNER_DFL UINT8_C(2) | ||
| 134 | #define CORNER_DBR UINT8_C(3) | ||
| 135 | #define CORNER_UFL UINT8_C(4) | ||
| 136 | #define CORNER_UBR UINT8_C(5) | ||
| 137 | #define CORNER_DFR UINT8_C(6) | ||
| 138 | #define CORNER_DBL UINT8_C(7) | ||
| 139 | |||
| 140 | #define EDGE_UF UINT8_C(0) | ||
| 141 | #define EDGE_UB UINT8_C(1) | ||
| 142 | #define EDGE_DB UINT8_C(2) | ||
| 143 | #define EDGE_DF UINT8_C(3) | ||
| 144 | #define EDGE_UR UINT8_C(4) | ||
| 145 | #define EDGE_UL UINT8_C(5) | ||
| 146 | #define EDGE_DL UINT8_C(6) | ||
| 147 | #define EDGE_DR UINT8_C(7) | ||
| 148 | #define EDGE_FR UINT8_C(8) | ||
| 149 | #define EDGE_FL UINT8_C(9) | ||
| 150 | #define EDGE_BL UINT8_C(10) | ||
| 151 | #define EDGE_BR UINT8_C(11) | ||
| 152 | |||
| 153 | #define EOSHIFT UINT8_C(4) | ||
| 154 | #define COSHIFT UINT8_C(5) | ||
| 155 | |||
| 156 | #define PBITS UINT8_C(0xF) | ||
| 157 | #define ESEPBIT_1 UINT8_C(0x4) | ||
| 158 | #define ESEPBIT_2 UINT8_C(0x8) | ||
| 159 | #define CSEPBIT UINT8_C(0x4) | ||
| 160 | #define EOBIT UINT8_C(0x10) | ||
| 161 | #define COBITS UINT8_C(0xF0) | ||
| 162 | #define COBITS_2 UINT8_C(0x60) | ||
| 163 | #define CTWIST_CW UINT8_C(0x20) | ||
| 164 | #define CTWIST_CCW UINT8_C(0x40) | ||
| 165 | #define EFLIP UINT8_C(0x10) | ||
| 166 | #define UINT8_ERROR UINT8_MAX | ||
| 167 | |||
| 168 | STATIC const uint32_t allowedmask[] = { | ||
| 169 | UINT32_C(0x3FFF8), | ||
| 170 | UINT32_C(0x3FFC0), | ||
| 171 | UINT32_C(0x3FE3F), | ||
| 172 | UINT32_C(0x3F03F), | ||
| 173 | UINT32_C(0x38FFF), | ||
| 174 | UINT32_C(0x00FFF) | ||
| 175 | }; | ||
| 176 | |||
| 177 | STATIC const char *cornerstr[] = { | ||
| 178 | [CORNER_UFR] = "UFR", | ||
| 179 | [CORNER_UBL] = "UBL", | ||
| 180 | [CORNER_DFL] = "DFL", | ||
| 181 | [CORNER_DBR] = "DBR", | ||
| 182 | [CORNER_UFL] = "UFL", | ||
| 183 | [CORNER_UBR] = "UBR", | ||
| 184 | [CORNER_DFR] = "DFR", | ||
| 185 | [CORNER_DBL] = "DBL" | ||
| 186 | }; | ||
| 187 | |||
| 188 | STATIC const char *cornerstralt[] = { | ||
| 189 | [CORNER_UFR] = "URF", | ||
| 190 | [CORNER_UBL] = "ULB", | ||
| 191 | [CORNER_DFL] = "DLF", | ||
| 192 | [CORNER_DBR] = "DRB", | ||
| 193 | [CORNER_UFL] = "ULF", | ||
| 194 | [CORNER_UBR] = "URB", | ||
| 195 | [CORNER_DFR] = "DRF", | ||
| 196 | [CORNER_DBL] = "DLB" | ||
| 197 | }; | ||
| 198 | |||
| 199 | STATIC const char *edgestr[] = { | ||
| 200 | [EDGE_UF] = "UF", | ||
| 201 | [EDGE_UB] = "UB", | ||
| 202 | [EDGE_DB] = "DB", | ||
| 203 | [EDGE_DF] = "DF", | ||
| 204 | [EDGE_UR] = "UR", | ||
| 205 | [EDGE_UL] = "UL", | ||
| 206 | [EDGE_DL] = "DL", | ||
| 207 | [EDGE_DR] = "DR", | ||
| 208 | [EDGE_FR] = "FR", | ||
| 209 | [EDGE_FL] = "FL", | ||
| 210 | [EDGE_BL] = "BL", | ||
| 211 | [EDGE_BR] = "BR" | ||
| 212 | }; | ||
| 213 | |||
| 214 | STATIC const char *movestr[] = { | ||
| 215 | [MOVE_U] = "U", | ||
| 216 | [MOVE_U2] = "U2", | ||
| 217 | [MOVE_U3] = "U'", | ||
| 218 | [MOVE_D] = "D", | ||
| 219 | [MOVE_D2] = "D2", | ||
| 220 | [MOVE_D3] = "D'", | ||
| 221 | [MOVE_R] = "R", | ||
| 222 | [MOVE_R2] = "R2", | ||
| 223 | [MOVE_R3] = "R'", | ||
| 224 | [MOVE_L] = "L", | ||
| 225 | [MOVE_L2] = "L2", | ||
| 226 | [MOVE_L3] = "L'", | ||
| 227 | [MOVE_F] = "F", | ||
| 228 | [MOVE_F2] = "F2", | ||
| 229 | [MOVE_F3] = "F'", | ||
| 230 | [MOVE_B] = "B", | ||
| 231 | [MOVE_B2] = "B2", | ||
| 232 | [MOVE_B3] = "B'", | ||
| 233 | }; | ||
| 234 | |||
| 235 | STATIC const char *transstr[] = { | ||
| 236 | [TRANS_UFr] = "rotation UF", | ||
| 237 | [TRANS_UFm] = "mirrored UF", | ||
| 238 | [TRANS_ULr] = "rotation UL", | ||
| 239 | [TRANS_ULm] = "mirrored UL", | ||
| 240 | [TRANS_UBr] = "rotation UB", | ||
| 241 | [TRANS_UBm] = "mirrored UB", | ||
| 242 | [TRANS_URr] = "rotation UR", | ||
| 243 | [TRANS_URm] = "mirrored UR", | ||
| 244 | [TRANS_DFr] = "rotation DF", | ||
| 245 | [TRANS_DFm] = "mirrored DF", | ||
| 246 | [TRANS_DLr] = "rotation DL", | ||
| 247 | [TRANS_DLm] = "mirrored DL", | ||
| 248 | [TRANS_DBr] = "rotation DB", | ||
| 249 | [TRANS_DBm] = "mirrored DB", | ||
| 250 | [TRANS_DRr] = "rotation DR", | ||
| 251 | [TRANS_DRm] = "mirrored DR", | ||
| 252 | [TRANS_RUr] = "rotation RU", | ||
| 253 | [TRANS_RUm] = "mirrored RU", | ||
| 254 | [TRANS_RFr] = "rotation RF", | ||
| 255 | [TRANS_RFm] = "mirrored RF", | ||
| 256 | [TRANS_RDr] = "rotation RD", | ||
| 257 | [TRANS_RDm] = "mirrored RD", | ||
| 258 | [TRANS_RBr] = "rotation RB", | ||
| 259 | [TRANS_RBm] = "mirrored RB", | ||
| 260 | [TRANS_LUr] = "rotation LU", | ||
| 261 | [TRANS_LUm] = "mirrored LU", | ||
| 262 | [TRANS_LFr] = "rotation LF", | ||
| 263 | [TRANS_LFm] = "mirrored LF", | ||
| 264 | [TRANS_LDr] = "rotation LD", | ||
| 265 | [TRANS_LDm] = "mirrored LD", | ||
| 266 | [TRANS_LBr] = "rotation LB", | ||
| 267 | [TRANS_LBm] = "mirrored LB", | ||
| 268 | [TRANS_FUr] = "rotation FU", | ||
| 269 | [TRANS_FUm] = "mirrored FU", | ||
| 270 | [TRANS_FRr] = "rotation FR", | ||
| 271 | [TRANS_FRm] = "mirrored FR", | ||
| 272 | [TRANS_FDr] = "rotation FD", | ||
| 273 | [TRANS_FDm] = "mirrored FD", | ||
| 274 | [TRANS_FLr] = "rotation FL", | ||
| 275 | [TRANS_FLm] = "mirrored FL", | ||
| 276 | [TRANS_BUr] = "rotation BU", | ||
| 277 | [TRANS_BUm] = "mirrored BU", | ||
| 278 | [TRANS_BRr] = "rotation BR", | ||
| 279 | [TRANS_BRm] = "mirrored BR", | ||
| 280 | [TRANS_BDr] = "rotation BD", | ||
| 281 | [TRANS_BDm] = "mirrored BD", | ||
| 282 | [TRANS_BLr] = "rotation BL", | ||
| 283 | [TRANS_BLm] = "mirrored BL", | ||
| 284 | }; | ||
| 285 | |||
| 286 | static uint8_t inverse_trans_table[48] = { | ||
| 287 | [TRANS_UFr] = TRANS_UFr, | ||
| 288 | [TRANS_UFm] = TRANS_UFm, | ||
| 289 | [TRANS_ULr] = TRANS_URr, | ||
| 290 | [TRANS_ULm] = TRANS_ULm, | ||
| 291 | [TRANS_UBr] = TRANS_UBr, | ||
| 292 | [TRANS_UBm] = TRANS_UBm, | ||
| 293 | [TRANS_URr] = TRANS_ULr, | ||
| 294 | [TRANS_URm] = TRANS_URm, | ||
| 295 | [TRANS_DFr] = TRANS_DFr, | ||
| 296 | [TRANS_DFm] = TRANS_DFm, | ||
| 297 | [TRANS_DLr] = TRANS_DLr, | ||
| 298 | [TRANS_DLm] = TRANS_DRm, | ||
| 299 | [TRANS_DBr] = TRANS_DBr, | ||
| 300 | [TRANS_DBm] = TRANS_DBm, | ||
| 301 | [TRANS_DRr] = TRANS_DRr, | ||
| 302 | [TRANS_DRm] = TRANS_DLm, | ||
| 303 | [TRANS_RUr] = TRANS_FRr, | ||
| 304 | [TRANS_RUm] = TRANS_FLm, | ||
| 305 | [TRANS_RFr] = TRANS_LFr, | ||
| 306 | [TRANS_RFm] = TRANS_RFm, | ||
| 307 | [TRANS_RDr] = TRANS_BLr, | ||
| 308 | [TRANS_RDm] = TRANS_BRm, | ||
| 309 | [TRANS_RBr] = TRANS_RBr, | ||
| 310 | [TRANS_RBm] = TRANS_LBm, | ||
| 311 | [TRANS_LUr] = TRANS_FLr, | ||
| 312 | [TRANS_LUm] = TRANS_FRm, | ||
| 313 | [TRANS_LFr] = TRANS_RFr, | ||
| 314 | [TRANS_LFm] = TRANS_LFm, | ||
| 315 | [TRANS_LDr] = TRANS_BRr, | ||
| 316 | [TRANS_LDm] = TRANS_BLm, | ||
| 317 | [TRANS_LBr] = TRANS_LBr, | ||
| 318 | [TRANS_LBm] = TRANS_RBm, | ||
| 319 | [TRANS_FUr] = TRANS_FUr, | ||
| 320 | [TRANS_FUm] = TRANS_FUm, | ||
| 321 | [TRANS_FRr] = TRANS_RUr, | ||
| 322 | [TRANS_FRm] = TRANS_LUm, | ||
| 323 | [TRANS_FDr] = TRANS_BUr, | ||
| 324 | [TRANS_FDm] = TRANS_BUm, | ||
| 325 | [TRANS_FLr] = TRANS_LUr, | ||
| 326 | [TRANS_FLm] = TRANS_RUm, | ||
| 327 | [TRANS_BUr] = TRANS_FDr, | ||
| 328 | [TRANS_BUm] = TRANS_FDm, | ||
| 329 | [TRANS_BRr] = TRANS_LDr, | ||
| 330 | [TRANS_BRm] = TRANS_RDm, | ||
| 331 | [TRANS_BDr] = TRANS_BDr, | ||
| 332 | [TRANS_BDm] = TRANS_BDm, | ||
| 333 | [TRANS_BLr] = TRANS_RDr, | ||
| 334 | [TRANS_BLm] = TRANS_LDm, | ||
| 335 | }; | ||
| 336 | |||
| 337 | static uint8_t trans_move_table[48][3] = { | ||
| 338 | [TRANS_UFr] = { MOVE_U, MOVE_R, MOVE_F }, | ||
| 339 | [TRANS_UFm] = { MOVE_U, MOVE_L, MOVE_F }, | ||
| 340 | [TRANS_ULr] = { MOVE_U, MOVE_F, MOVE_L }, | ||
| 341 | [TRANS_ULm] = { MOVE_U, MOVE_F, MOVE_R }, | ||
| 342 | [TRANS_UBr] = { MOVE_U, MOVE_L, MOVE_B }, | ||
| 343 | [TRANS_UBm] = { MOVE_U, MOVE_R, MOVE_B }, | ||
| 344 | [TRANS_URr] = { MOVE_U, MOVE_B, MOVE_R }, | ||
| 345 | [TRANS_URm] = { MOVE_U, MOVE_B, MOVE_L }, | ||
| 346 | [TRANS_DFr] = { MOVE_D, MOVE_L, MOVE_F }, | ||
| 347 | [TRANS_DFm] = { MOVE_D, MOVE_R, MOVE_F }, | ||
| 348 | [TRANS_DLr] = { MOVE_D, MOVE_B, MOVE_L }, | ||
| 349 | [TRANS_DLm] = { MOVE_D, MOVE_B, MOVE_R }, | ||
| 350 | [TRANS_DBr] = { MOVE_D, MOVE_R, MOVE_B }, | ||
| 351 | [TRANS_DBm] = { MOVE_D, MOVE_L, MOVE_B }, | ||
| 352 | [TRANS_DRr] = { MOVE_D, MOVE_F, MOVE_R }, | ||
| 353 | [TRANS_DRm] = { MOVE_D, MOVE_F, MOVE_L }, | ||
| 354 | [TRANS_RUr] = { MOVE_R, MOVE_F, MOVE_U }, | ||
| 355 | [TRANS_RUm] = { MOVE_L, MOVE_F, MOVE_U }, | ||
| 356 | [TRANS_RFr] = { MOVE_R, MOVE_D, MOVE_F }, | ||
| 357 | [TRANS_RFm] = { MOVE_L, MOVE_D, MOVE_F }, | ||
| 358 | [TRANS_RDr] = { MOVE_R, MOVE_B, MOVE_D }, | ||
| 359 | [TRANS_RDm] = { MOVE_L, MOVE_B, MOVE_D }, | ||
| 360 | [TRANS_RBr] = { MOVE_R, MOVE_U, MOVE_B }, | ||
| 361 | [TRANS_RBm] = { MOVE_L, MOVE_U, MOVE_B }, | ||
| 362 | [TRANS_LUr] = { MOVE_L, MOVE_B, MOVE_U }, | ||
| 363 | [TRANS_LUm] = { MOVE_R, MOVE_B, MOVE_U }, | ||
| 364 | [TRANS_LFr] = { MOVE_L, MOVE_U, MOVE_F }, | ||
| 365 | [TRANS_LFm] = { MOVE_R, MOVE_U, MOVE_F }, | ||
| 366 | [TRANS_LDr] = { MOVE_L, MOVE_F, MOVE_D }, | ||
| 367 | [TRANS_LDm] = { MOVE_R, MOVE_F, MOVE_D }, | ||
| 368 | [TRANS_LBr] = { MOVE_L, MOVE_D, MOVE_B }, | ||
| 369 | [TRANS_LBm] = { MOVE_R, MOVE_D, MOVE_B }, | ||
| 370 | [TRANS_FUr] = { MOVE_F, MOVE_L, MOVE_U }, | ||
| 371 | [TRANS_FUm] = { MOVE_F, MOVE_R, MOVE_U }, | ||
| 372 | [TRANS_FRr] = { MOVE_F, MOVE_U, MOVE_R }, | ||
| 373 | [TRANS_FRm] = { MOVE_F, MOVE_U, MOVE_L }, | ||
| 374 | [TRANS_FDr] = { MOVE_F, MOVE_R, MOVE_D }, | ||
| 375 | [TRANS_FDm] = { MOVE_F, MOVE_L, MOVE_D }, | ||
| 376 | [TRANS_FLr] = { MOVE_F, MOVE_D, MOVE_L }, | ||
| 377 | [TRANS_FLm] = { MOVE_F, MOVE_D, MOVE_R }, | ||
| 378 | [TRANS_BUr] = { MOVE_B, MOVE_R, MOVE_U }, | ||
| 379 | [TRANS_BUm] = { MOVE_B, MOVE_L, MOVE_U }, | ||
| 380 | [TRANS_BRr] = { MOVE_B, MOVE_D, MOVE_R }, | ||
| 381 | [TRANS_BRm] = { MOVE_B, MOVE_D, MOVE_L }, | ||
| 382 | [TRANS_BDr] = { MOVE_B, MOVE_L, MOVE_D }, | ||
| 383 | [TRANS_BDm] = { MOVE_B, MOVE_R, MOVE_D }, | ||
| 384 | [TRANS_BLr] = { MOVE_B, MOVE_U, MOVE_L }, | ||
| 385 | [TRANS_BLm] = { MOVE_B, MOVE_U, MOVE_R }, | ||
| 386 | }; | ||
