commit d969dc0ad57d3e1e346df719cf9f2708ee87d2e7 parent 6f750160507b87c9ea31899c0199e9b336e8ddae Author: Sebastiano Tronto <sebastiano@tronto.net> Date: Wed, 23 Apr 2025 12:26:52 +0200 Almost added support for wide moves, only solve missing Diffstat:
142 files changed, 382 insertions(+), 50 deletions(-)
diff --git a/src/core/constants.h b/src/core/constants.h @@ -580,7 +580,7 @@ STATIC const char *transstr[] = { [TRANS_BLm] = "mirrored BL", }; -static uint8_t inverse_trans_table[] = { +STATIC uint8_t inverse_trans_table[] = { [TRANS_UFr] = TRANS_UFr, [TRANS_UFm] = TRANS_UFm, [TRANS_ULr] = TRANS_URr, @@ -631,7 +631,7 @@ static uint8_t inverse_trans_table[] = { [TRANS_BLm] = TRANS_LDm, }; -static uint8_t trans_move_table[][3] = { +STATIC uint8_t trans_move_table[][3] = { [TRANS_UFr] = { MOVE_U, MOVE_R, MOVE_F }, [TRANS_UFm] = { MOVE_U, MOVE_L, MOVE_F }, [TRANS_ULr] = { MOVE_U, MOVE_F, MOVE_L }, @@ -682,7 +682,7 @@ static uint8_t trans_move_table[][3] = { [TRANS_BLm] = { MOVE_B, MOVE_U, MOVE_R }, }; -static uint8_t orientation_transition_table[][3] = { +STATIC uint8_t orientation_transition_table[][3] = { [ORIENTATION_UF] = { ORIENTATION_FD, ORIENTATION_UR, ORIENTATION_LF }, [ORIENTATION_UR] = { ORIENTATION_RD, ORIENTATION_UB, ORIENTATION_FR }, [ORIENTATION_UB] = { ORIENTATION_BD, ORIENTATION_UL, ORIENTATION_RB }, @@ -709,26 +709,94 @@ static uint8_t orientation_transition_table[][3] = { [ORIENTATION_BL] = { ORIENTATION_LF, ORIENTATION_BD, ORIENTATION_DL }, }; -static struct { - uint8_t moves[3]; - uint8_t rotations[6]; -} equivalent_move_table[] = { - [MOVE_U] = { { MOVE_U, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_U2] = { { MOVE_U2, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_U3] = { { MOVE_U3, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_D] = { { MOVE_D, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_D2] = { { MOVE_D2, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_D3] = { { MOVE_D3, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_R] = { { MOVE_R, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_R2] = { { MOVE_R2, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_R3] = { { MOVE_R3, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_L] = { { MOVE_L, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_L2] = { { MOVE_L2, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_L3] = { { MOVE_L3, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_F] = { { MOVE_F, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_F2] = { { MOVE_F2, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_F3] = { { MOVE_F3, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_B] = { { MOVE_B, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_B2] = { { MOVE_B2, UINT8_MAX }, {UINT8_MAX} }, - [MOVE_B3] = { { MOVE_B3, UINT8_MAX }, {UINT8_MAX} }, +STATIC uint8_t orientation_trans[] = { + [ORIENTATION_UF] = TRANS_UFr, + [ORIENTATION_UR] = TRANS_URr, + [ORIENTATION_UB] = TRANS_UBr, + [ORIENTATION_UL] = TRANS_ULr, + [ORIENTATION_DF] = TRANS_DFr, + [ORIENTATION_DR] = TRANS_DRr, + [ORIENTATION_DB] = TRANS_DBr, + [ORIENTATION_DL] = TRANS_DLr, + [ORIENTATION_RF] = TRANS_RFr, + [ORIENTATION_RD] = TRANS_RDr, + [ORIENTATION_RB] = TRANS_RBr, + [ORIENTATION_RU] = TRANS_RUr, + [ORIENTATION_LF] = TRANS_LFr, + [ORIENTATION_LD] = TRANS_LDr, + [ORIENTATION_LB] = TRANS_LBr, + [ORIENTATION_LU] = TRANS_LUr, + [ORIENTATION_FD] = TRANS_FDr, + [ORIENTATION_FR] = TRANS_FRr, + [ORIENTATION_FU] = TRANS_FUr, + [ORIENTATION_FL] = TRANS_FLr, + [ORIENTATION_BD] = TRANS_BDr, + [ORIENTATION_BR] = TRANS_BRr, + [ORIENTATION_BU] = TRANS_BUr, + [ORIENTATION_BL] = TRANS_BLr, +}; + +typedef struct { + uint8_t move[3]; + uint8_t rotation[4]; +} equivalent_moves_t; + +STATIC equivalent_moves_t equivalent_moves_table[] = { + [MOVE_U] = {{MOVE_U, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_U2] = {{MOVE_U2, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_U3] = {{MOVE_U3, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_D] = {{MOVE_D, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_D2] = {{MOVE_D2, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_D3] = {{MOVE_D3, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_R] = {{MOVE_R, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_R2] = {{MOVE_R2, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_R3] = {{MOVE_R3, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_L] = {{MOVE_L, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_L2] = {{MOVE_L2, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_L3] = {{MOVE_L3, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_F] = {{MOVE_F, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_F2] = {{MOVE_F2, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_F3] = {{MOVE_F3, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_B] = {{MOVE_B, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_B2] = {{MOVE_B2, UINT8_MAX}, {UINT8_MAX}}, + [MOVE_B3] = {{MOVE_B3, UINT8_MAX}, {UINT8_MAX}}, + + [MOVE_Uw] = {{MOVE_D, UINT8_MAX}, {1, UINT8_MAX}}, + [MOVE_Uw2] = {{MOVE_D2, UINT8_MAX}, {1, 1, UINT8_MAX}}, + [MOVE_Uw3] = {{MOVE_D3, UINT8_MAX}, {1, 1, 1, UINT8_MAX}}, + [MOVE_Dw] = {{MOVE_U, UINT8_MAX}, {1, 1, 1, UINT8_MAX}}, + [MOVE_Dw2] = {{MOVE_U2, UINT8_MAX}, {1, 1, UINT8_MAX}}, + [MOVE_Dw3] = {{MOVE_U3, UINT8_MAX}, {1, UINT8_MAX}}, + [MOVE_Rw] = {{MOVE_L, UINT8_MAX}, {0, UINT8_MAX}}, + [MOVE_Rw2] = {{MOVE_L2, UINT8_MAX}, {0, 0, UINT8_MAX}}, + [MOVE_Rw3] = {{MOVE_L3, UINT8_MAX}, {0, 0, 0, UINT8_MAX}}, + [MOVE_Lw] = {{MOVE_R, UINT8_MAX}, {0, 0, 0, UINT8_MAX}}, + [MOVE_Lw2] = {{MOVE_R2, UINT8_MAX}, {0, 0, UINT8_MAX}}, + [MOVE_Lw3] = {{MOVE_R3, UINT8_MAX}, {0, UINT8_MAX}}, + [MOVE_Fw] = {{MOVE_B, UINT8_MAX}, {2, UINT8_MAX}}, + [MOVE_Fw2] = {{MOVE_B2, UINT8_MAX}, {2, 2, UINT8_MAX}}, + [MOVE_Fw3] = {{MOVE_B3, UINT8_MAX}, {2, 2, 2, UINT8_MAX}}, + [MOVE_Bw] = {{MOVE_F, UINT8_MAX}, {2, 2, 2, UINT8_MAX}}, + [MOVE_Bw2] = {{MOVE_F2, UINT8_MAX}, {2, 2, UINT8_MAX}}, + [MOVE_Bw3] = {{MOVE_F3, UINT8_MAX}, {2, UINT8_MAX}}, + + [MOVE_M] = {{MOVE_R, MOVE_L3, UINT8_MAX}, {0, 0, 0, UINT8_MAX}}, + [MOVE_M2] = {{MOVE_R2, MOVE_L2, UINT8_MAX}, {0, 0, UINT8_MAX}}, + [MOVE_M3] = {{MOVE_R3, MOVE_L, UINT8_MAX}, {0, UINT8_MAX}}, + [MOVE_S] = {{MOVE_F3, MOVE_B, UINT8_MAX}, {2, UINT8_MAX}}, + [MOVE_S2] = {{MOVE_F2, MOVE_B2, UINT8_MAX}, {2, 2, UINT8_MAX}}, + [MOVE_S3] = {{MOVE_F, MOVE_B3, UINT8_MAX}, {2, 2, 2, UINT8_MAX}}, + [MOVE_E] = {{MOVE_U, MOVE_D3, UINT8_MAX}, {1, 1, 1, UINT8_MAX}}, + [MOVE_E2] = {{MOVE_U2, MOVE_D2, UINT8_MAX}, {1, 1, UINT8_MAX}}, + [MOVE_E3] = {{MOVE_U3, MOVE_D, UINT8_MAX}, {1, UINT8_MAX}}, + + [MOVE_x] = {{UINT8_MAX}, {0, UINT8_MAX}}, + [MOVE_x2] = {{UINT8_MAX}, {0, 0, UINT8_MAX}}, + [MOVE_x3] = {{UINT8_MAX}, {0, 0, 0, UINT8_MAX}}, + [MOVE_y] = {{UINT8_MAX}, {1, UINT8_MAX}}, + [MOVE_y2] = {{UINT8_MAX}, {1, 1, UINT8_MAX}}, + [MOVE_y3] = {{UINT8_MAX}, {1, 1, 1, UINT8_MAX}}, + [MOVE_z] = {{UINT8_MAX}, {2, UINT8_MAX}}, + [MOVE_z2] = {{UINT8_MAX}, {2, 2, UINT8_MAX}}, + [MOVE_z3] = {{UINT8_MAX}, {2, 2, 2, UINT8_MAX}}, }; diff --git a/src/core/moves.h b/src/core/moves.h @@ -14,8 +14,13 @@ STATIC_INLINE uint8_t movebase(uint8_t); STATIC_INLINE uint8_t moveaxis(uint8_t); STATIC_INLINE bool isbase(uint8_t); STATIC_INLINE bool parallel(uint8_t, uint8_t); +STATIC_INLINE uint8_t moveopposite(uint8_t); +STATIC_INLINE uint8_t reorient_move(uint8_t, uint8_t); +STATIC_INLINE uint8_t movefollow(uint8_t); +STATIC uint8_t transform_move(uint8_t, uint8_t); STATIC cube_t move(cube_t, uint8_t); +STATIC oriented_cube_t move_extended(oriented_cube_t, uint8_t); STATIC cube_t premove(cube_t, uint8_t); STATIC uint8_t inverse_move(uint8_t); STATIC void sortparallel_moves(size_t n, uint8_t [n]); @@ -112,14 +117,14 @@ countmoves(const char *buf) { uint8_t m; uint64_t c; + int64_t count; + count = 0; FOREACH_READMOVE(buf, m, c, INT_MAX, NISSY_ERROR_INVALID_MOVES, - {} + count += m <= MOVE_Bw3 ? 1 : (m <= MOVE_E3 ? 2 : 0); ) - (void)m; /* Ignore "variable set but not used" warning */ - - return (int64_t)c; + return count; } STATIC int64_t @@ -188,6 +193,9 @@ movebase(uint8_t move) STATIC_INLINE uint8_t moveaxis(uint8_t move) { + if (move > MOVE_B3) + return UINT8_ERROR; + return move / 6; } @@ -209,6 +217,44 @@ moveopposite(uint8_t move) return movebase(move) == 2 * moveaxis(move) ? move + 3 : move - 3; } +STATIC_INLINE uint8_t +reorient_move(uint8_t m, uint8_t or) +{ + return transform_move(m, orientation_trans[or]); +} + +/* This is currently unused, but it may turn out to be useful at some point */ +STATIC_INLINE uint8_t +movefollow(uint8_t move) +{ + uint8_t b, m; + + if (move <= MOVE_B3) + return move; + + if (move <= MOVE_Bw3) + return move - MOVE_Uw; + + b = UINT8_C(3) * (move / UINT8_C(3)); + m = move - b; + switch (b) { + case MOVE_M: + return MOVE_L + m; + case MOVE_S: + return MOVE_F + m; + case MOVE_E: + return MOVE_D + m; + case MOVE_x: + return MOVE_R + m; + case MOVE_y: + return MOVE_U + m; + case MOVE_z: + return MOVE_F + m; + default: + return UINT8_ERROR; + } +} + STATIC cube_t move(cube_t c, uint8_t m) { @@ -255,6 +301,47 @@ move(cube_t c, uint8_t m) } } +STATIC uint8_t +transform_move(uint8_t m, uint8_t t) +{ + uint8_t a, base, modifier; + + a = moveaxis(m); + if (a == UINT8_ERROR) + return UINT8_ERROR; + + base = trans_move_table[t][a]; + if (movebase(m) != 2 * a) + base = moveopposite(base); + + modifier = m % 3; + if (t >= TRANS_UFm) + modifier = 2 - modifier; + + return base + modifier; +} + +STATIC oriented_cube_t +move_extended(oriented_cube_t c, uint8_t m) +{ + int i; + equivalent_moves_t eqm; + oriented_cube_t ret; + + eqm = equivalent_moves_table[m]; + ret = c; + + for (i = 0; eqm.move[i] != UINT8_MAX; i++) + ret.cube = move( + ret.cube, reorient_move(eqm.move[i], ret.orientation)); + + for (i = 0; eqm.rotation[i] != UINT8_MAX; i++) + ret.orientation = orientation_transition_table[ + ret.orientation][eqm.rotation[i]]; + + return ret; +} + /* Applies the INVERSE of m BEFORE the scramble corresponding to c */ STATIC cube_t premove(cube_t c, uint8_t m) @@ -345,7 +432,7 @@ applymoves(oriented_cube_t cube, const char *buf) "move error: inconsistent cube\n"); FOREACH_READMOVE(buf, m, c, -1, ZERO_ORIENTED_CUBE, - cube.cube = move(cube.cube, m); + cube = move_extended(cube, m); ) return cube; diff --git a/src/core/transform.h b/src/core/transform.h @@ -25,7 +25,6 @@ STATIC cube_t transform_corners(cube_t, uint8_t); STATIC cube_t transform(cube_t, uint8_t); STATIC oriented_cube_t applytrans(oriented_cube_t, const char *); STATIC_INLINE uint8_t inverse_trans(uint8_t); -STATIC uint8_t transform_move(uint8_t, uint8_t); STATIC uint64_t symmetry_mask(cube_t); STATIC uint8_t @@ -392,23 +391,6 @@ inverse_trans(uint8_t t) return inverse_trans_table[t]; } -STATIC uint8_t -transform_move(uint8_t m, uint8_t t) -{ - uint8_t a, base, modifier; - - a = moveaxis(m); - base = trans_move_table[t][a]; - if (movebase(m) != 2 * a) - base = moveopposite(base); - - modifier = m % 3; - if (t >= TRANS_UFm) - modifier = 2 - modifier; - - return base + modifier; -} - STATIC uint64_t symmetry_mask(cube_t cube) { diff --git a/test/030_move/500_Uw_solved.in b/test/030_move/500_Uw_solved.in @@ -0,0 +1,2 @@ +Uw +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/500_Uw_solved.out b/test/030_move/500_Uw_solved.out @@ -0,0 +1 @@ +ABHGEFCD=ABHGEFCDIJKL=B diff --git a/test/030_move/501_Uw2_solved.in b/test/030_move/501_Uw2_solved.in @@ -0,0 +1,2 @@ +Uw2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/501_Uw2_solved.out b/test/030_move/501_Uw2_solved.out @@ -0,0 +1 @@ +ABDCEFHG=ABDCEFHGIJKL=C diff --git a/test/030_move/502_Uw3_solved.in b/test/030_move/502_Uw3_solved.in @@ -0,0 +1,2 @@ +Uw3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/502_Uw3_solved.out b/test/030_move/502_Uw3_solved.out @@ -0,0 +1 @@ +ABGHEFDC=ABGHEFDCIJKL=D diff --git a/test/030_move/503_Dw_solved.in b/test/030_move/503_Dw_solved.in @@ -0,0 +1,2 @@ +Dw +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/503_Dw_solved.out b/test/030_move/503_Dw_solved.out @@ -0,0 +1 @@ +FECDABGH=EFCDBAGHIJKL=D diff --git a/test/030_move/504_Dw2_solved.in b/test/030_move/504_Dw2_solved.in @@ -0,0 +1,2 @@ +Dw2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/504_Dw2_solved.out b/test/030_move/504_Dw2_solved.out @@ -0,0 +1 @@ +BACDFEGH=BACDFEGHIJKL=C diff --git a/test/030_move/505_Dw3_solved.in b/test/030_move/505_Dw3_solved.in @@ -0,0 +1,2 @@ +Dw3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/505_Dw3_solved.out b/test/030_move/505_Dw3_solved.out @@ -0,0 +1 @@ +EFCDBAGH=FECDABGHIJKL=B diff --git a/test/030_move/506_Rw_solved.in b/test/030_move/506_Rw_solved.in @@ -0,0 +1,2 @@ +Rw +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/506_Rw_solved.out b/test/030_move/506_Rw_solved.out @@ -0,0 +1 @@ +AXUDJFGK=ABCDEKJHIFGL=Q diff --git a/test/030_move/507_Rw2_solved.in b/test/030_move/507_Rw2_solved.in @@ -0,0 +1,2 @@ +Rw2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/507_Rw2_solved.out b/test/030_move/507_Rw2_solved.out @@ -0,0 +1 @@ +ACBDHFGE=ABCDEGFHIKJL=G diff --git a/test/030_move/508_Rw3_solved.in b/test/030_move/508_Rw3_solved.in @@ -0,0 +1,2 @@ +Rw3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/508_Rw3_solved.out b/test/030_move/508_Rw3_solved.out @@ -0,0 +1 @@ +AUXDKFGJ=ABCDEJKHIGFL=W diff --git a/test/030_move/509_Lw_solved.in b/test/030_move/509_Lw_solved.in @@ -0,0 +1,2 @@ +Lw +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/509_Lw_solved.out b/test/030_move/509_Lw_solved.out @@ -0,0 +1 @@ +WBCVEILH=ABCDIFGLHJKE=W diff --git a/test/030_move/510_Lw2_solved.in b/test/030_move/510_Lw2_solved.in @@ -0,0 +1,2 @@ +Lw2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/510_Lw2_solved.out b/test/030_move/510_Lw2_solved.out @@ -0,0 +1 @@ +DBCAEGFH=ABCDHFGELJKI=G diff --git a/test/030_move/511_Lw3_solved.in b/test/030_move/511_Lw3_solved.in @@ -0,0 +1,2 @@ +Lw3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/511_Lw3_solved.out b/test/030_move/511_Lw3_solved.out @@ -0,0 +1 @@ +VBCWELIH=ABCDLFGIEJKH=Q diff --git a/test/030_move/512_Fw_solved.in b/test/030_move/512_Fw_solved.in @@ -0,0 +1,2 @@ +Fw +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/512_Fw_solved.out b/test/030_move/512_Fw_solved.out @@ -0,0 +1 @@ +ANCPETGR=AbaDEFGHIJRS=M diff --git a/test/030_move/513_Fw2_solved.in b/test/030_move/513_Fw2_solved.in @@ -0,0 +1,2 @@ +Fw2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/513_Fw2_solved.out b/test/030_move/513_Fw2_solved.out @@ -0,0 +1 @@ +ADCBEHGF=ACBDEFGHIJLK=E diff --git a/test/030_move/514_Fw3_solved.in b/test/030_move/514_Fw3_solved.in @@ -0,0 +1,2 @@ +Fw3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/514_Fw3_solved.out b/test/030_move/514_Fw3_solved.out @@ -0,0 +1 @@ +APCNERGT=AabDEFGHIJSR=I diff --git a/test/030_move/515_Bw_solved.in b/test/030_move/515_Bw_solved.in @@ -0,0 +1,2 @@ +Bw +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/515_Bw_solved.out b/test/030_move/515_Bw_solved.out @@ -0,0 +1 @@ +MBODSFQH=ZBCYEFGHQTKL=I diff --git a/test/030_move/516_Bw2_solved.in b/test/030_move/516_Bw2_solved.in @@ -0,0 +1,2 @@ +Bw2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/516_Bw2_solved.out b/test/030_move/516_Bw2_solved.out @@ -0,0 +1 @@ +CBADGFEH=DBCAEFGHJIKL=E diff --git a/test/030_move/517_Bw3_solved.in b/test/030_move/517_Bw3_solved.in @@ -0,0 +1,2 @@ +Bw3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/517_Bw3_solved.out b/test/030_move/517_Bw3_solved.out @@ -0,0 +1 @@ +OBMDQFSH=YBCZEFGHTQKL=M diff --git a/test/030_move/518_M_solved.in b/test/030_move/518_M_solved.in @@ -0,0 +1,2 @@ +M +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/518_M_solved.out b/test/030_move/518_M_solved.out @@ -0,0 +1 @@ +WUXVKILJ=ABCDIJKLHGFE=W diff --git a/test/030_move/519_M2_solved.in b/test/030_move/519_M2_solved.in @@ -0,0 +1,2 @@ +M2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/519_M2_solved.out b/test/030_move/519_M2_solved.out @@ -0,0 +1 @@ +DCBAHGFE=ABCDHGFELKJI=G diff --git a/test/030_move/520_M3_solved.in b/test/030_move/520_M3_solved.in @@ -0,0 +1,2 @@ +M3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/520_M3_solved.out b/test/030_move/520_M3_solved.out @@ -0,0 +1 @@ +VXUWJLIK=ABCDLKJIEFGH=Q diff --git a/test/030_move/521_S_solved.in b/test/030_move/521_S_solved.in @@ -0,0 +1,2 @@ +S +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/521_S_solved.out b/test/030_move/521_S_solved.out @@ -0,0 +1 @@ +ONMPQTSR=YbaZEFGHTQRS=M diff --git a/test/030_move/522_S2_solved.in b/test/030_move/522_S2_solved.in @@ -0,0 +1,2 @@ +S2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/522_S2_solved.out b/test/030_move/522_S2_solved.out @@ -0,0 +1 @@ +CDABGHEF=DCBAEFGHJILK=E diff --git a/test/030_move/523_S3_solved.in b/test/030_move/523_S3_solved.in @@ -0,0 +1,2 @@ +S3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/523_S3_solved.out b/test/030_move/523_S3_solved.out @@ -0,0 +1 @@ +MPONSRQT=ZabYEFGHQTSR=I diff --git a/test/030_move/524_E_solved.in b/test/030_move/524_E_solved.in @@ -0,0 +1,2 @@ +E +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/524_E_solved.out b/test/030_move/524_E_solved.out @@ -0,0 +1 @@ +FEGHABDC=EFGHBADCIJKL=D diff --git a/test/030_move/525_E2_solved.in b/test/030_move/525_E2_solved.in @@ -0,0 +1,2 @@ +E2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/525_E2_solved.out b/test/030_move/525_E2_solved.out @@ -0,0 +1 @@ +BADCFEHG=BADCFEHGIJKL=C diff --git a/test/030_move/526_E3_solved.in b/test/030_move/526_E3_solved.in @@ -0,0 +1,2 @@ +E3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/526_E3_solved.out b/test/030_move/526_E3_solved.out @@ -0,0 +1 @@ +EFHGBACD=FEHGABCDIJKL=B diff --git a/test/030_move/527_x_solved.in b/test/030_move/527_x_solved.in @@ -0,0 +1,2 @@ +x +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/527_x_solved.out b/test/030_move/527_x_solved.out @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=Q diff --git a/test/030_move/528_x2_solved.in b/test/030_move/528_x2_solved.in @@ -0,0 +1,2 @@ +x2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/528_x2_solved.out b/test/030_move/528_x2_solved.out @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=G diff --git a/test/030_move/529_x3_solved.in b/test/030_move/529_x3_solved.in @@ -0,0 +1,2 @@ +x3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/529_x3_solved.out b/test/030_move/529_x3_solved.out @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=W diff --git a/test/030_move/530_y_solved.in b/test/030_move/530_y_solved.in @@ -0,0 +1,2 @@ +y +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/530_y_solved.out b/test/030_move/530_y_solved.out @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=B diff --git a/test/030_move/531_y2_solved.in b/test/030_move/531_y2_solved.in @@ -0,0 +1,2 @@ +y2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/531_y2_solved.out b/test/030_move/531_y2_solved.out @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=C diff --git a/test/030_move/532_y3_solved.in b/test/030_move/532_y3_solved.in @@ -0,0 +1,2 @@ +y3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/532_y3_solved.out b/test/030_move/532_y3_solved.out @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=D diff --git a/test/030_move/533_z_solved.in b/test/030_move/533_z_solved.in @@ -0,0 +1,2 @@ +z +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/533_z_solved.out b/test/030_move/533_z_solved.out @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=M diff --git a/test/030_move/534_z2_solved.in b/test/030_move/534_z2_solved.in @@ -0,0 +1,2 @@ +z2 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/534_z2_solved.out b/test/030_move/534_z2_solved.out @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=E diff --git a/test/030_move/535_z3_solved.in b/test/030_move/535_z3_solved.in @@ -0,0 +1,2 @@ +z3 +ABCDEFGH=ABCDEFGHIJKL=A diff --git a/test/030_move/535_z3_solved.out b/test/030_move/535_z3_solved.out @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=I diff --git a/test/030_move/550_scrambled_random.in b/test/030_move/550_scrambled_random.in @@ -0,0 +1,2 @@ +R2 Uw F x Bw2 M' y2 z S3 +ABCDEFGH=ABCDEFGHIJKL=F diff --git a/test/030_move/550_scrambled_random.out b/test/030_move/550_scrambled_random.out @@ -0,0 +1 @@ +WTCEAFJP=TXWRLKQUJVIS=C diff --git a/test/032_countmoves/00_empty.in b/test/032_countmoves/00_empty.in @@ -0,0 +1 @@ + diff --git a/test/032_countmoves/00_empty.out b/test/032_countmoves/00_empty.out @@ -0,0 +1 @@ +0 diff --git a/test/032_countmoves/01_U.in b/test/032_countmoves/01_U.in @@ -0,0 +1 @@ +U diff --git a/test/032_countmoves/01_U.out b/test/032_countmoves/01_U.out @@ -0,0 +1 @@ +1 diff --git a/test/032_countmoves/02_Fw3.in b/test/032_countmoves/02_Fw3.in @@ -0,0 +1 @@ +Fw' diff --git a/test/032_countmoves/02_Fw3.out b/test/032_countmoves/02_Fw3.out @@ -0,0 +1 @@ +1 diff --git a/test/032_countmoves/03_S2.in b/test/032_countmoves/03_S2.in @@ -0,0 +1 @@ +S2 diff --git a/test/032_countmoves/03_S2.out b/test/032_countmoves/03_S2.out @@ -0,0 +1 @@ +2 diff --git a/test/032_countmoves/04_y3.in b/test/032_countmoves/04_y3.in @@ -0,0 +1 @@ +y' diff --git a/test/032_countmoves/04_y3.out b/test/032_countmoves/04_y3.out @@ -0,0 +1 @@ +0 diff --git a/test/032_countmoves/countmoves_tests.c b/test/032_countmoves/countmoves_tests.c @@ -0,0 +1,11 @@ +#include "../test.h" + +int64_t countmoves(const char *); + +void run(void) { + char movestr[STRLENMAX]; + + fgets(movestr, STRLENMAX, stdin); + + printf("%" PRId64 "\n", countmoves(movestr)); +} diff --git a/test/062_transform_move/transform_move_tests.c b/test/062_transform_move/transform_move_tests.c @@ -5,7 +5,7 @@ cube_t applytrans(cube_t, const char *); uint8_t transform_move(uint8_t, uint8_t); int64_t readmoves(const char *, size_t n, uint8_t [n]); -cube_t move(cube_t, uint8_t); +oriented_cube_t move_extended(oriented_cube_t, uint8_t); oriented_cube_t applymoves(oriented_cube_t, const char *); uint8_t readtrans(const char[static NISSY_SIZE_TRANSFORMATION]); @@ -22,7 +22,7 @@ void run(void) { n = readmoves(movestr, MAXMOVES, moves); t = readtrans(transtr); for (i = 0; i < n; i++) - cube.cube = move(cube.cube, transform_move(moves[i], t)); + cube = move_extended(cube, transform_move(moves[i], t)); writecube(cube, STRLENMAX, cubestr); printf("%s\n", cubestr); diff --git a/utils/cubes/move_18_Uw.txt b/utils/cubes/move_18_Uw.txt @@ -0,0 +1 @@ +ABHGEFCD=ABHGEFCDIJKL=B diff --git a/utils/cubes/move_19_Uw2.txt b/utils/cubes/move_19_Uw2.txt @@ -0,0 +1 @@ +ABDCEFHG=ABDCEFHGIJKL=C diff --git a/utils/cubes/move_20_Uw3.txt b/utils/cubes/move_20_Uw3.txt @@ -0,0 +1 @@ +ABGHEFDC=ABGHEFDCIJKL=D diff --git a/utils/cubes/move_21_Dw.txt b/utils/cubes/move_21_Dw.txt @@ -0,0 +1 @@ +FECDABGH=EFCDBAGHIJKL=D diff --git a/utils/cubes/move_22_Dw2.txt b/utils/cubes/move_22_Dw2.txt @@ -0,0 +1 @@ +BACDFEGH=BACDFEGHIJKL=C diff --git a/utils/cubes/move_23_Dw3.txt b/utils/cubes/move_23_Dw3.txt @@ -0,0 +1 @@ +EFCDBAGH=FECDABGHIJKL=B diff --git a/utils/cubes/move_24_Rw.txt b/utils/cubes/move_24_Rw.txt @@ -0,0 +1 @@ +AXUDJFGK=ABCDEKJHIFGL=Q diff --git a/utils/cubes/move_25_Rw2.txt b/utils/cubes/move_25_Rw2.txt @@ -0,0 +1 @@ +ACBDHFGE=ABCDEGFHIKJL=G diff --git a/utils/cubes/move_26_Rw3.txt b/utils/cubes/move_26_Rw3.txt @@ -0,0 +1 @@ +AUXDKFGJ=ABCDEJKHIGFL=W diff --git a/utils/cubes/move_27_Lw.txt b/utils/cubes/move_27_Lw.txt @@ -0,0 +1 @@ +WBCVEILH=ABCDIFGLHJKE=W diff --git a/utils/cubes/move_28_Lw2.txt b/utils/cubes/move_28_Lw2.txt @@ -0,0 +1 @@ +DBCAEGFH=ABCDHFGELJKI=G diff --git a/utils/cubes/move_29_Lw3.txt b/utils/cubes/move_29_Lw3.txt @@ -0,0 +1 @@ +VBCWELIH=ABCDLFGIEJKH=Q diff --git a/utils/cubes/move_30_Fw.txt b/utils/cubes/move_30_Fw.txt @@ -0,0 +1 @@ +ANCPETGR=AbaDEFGHIJRS=M diff --git a/utils/cubes/move_31_Fw2.txt b/utils/cubes/move_31_Fw2.txt @@ -0,0 +1 @@ +ADCBEHGF=ACBDEFGHIJLK=E diff --git a/utils/cubes/move_32_Fw3.txt b/utils/cubes/move_32_Fw3.txt @@ -0,0 +1 @@ +APCNERGT=AabDEFGHIJSR=I diff --git a/utils/cubes/move_33_Bw.txt b/utils/cubes/move_33_Bw.txt @@ -0,0 +1 @@ +MBODSFQH=ZBCYEFGHQTKL=I diff --git a/utils/cubes/move_34_Bw2.txt b/utils/cubes/move_34_Bw2.txt @@ -0,0 +1 @@ +CBADGFEH=DBCAEFGHJIKL=E diff --git a/utils/cubes/move_35_Bw3.txt b/utils/cubes/move_35_Bw3.txt @@ -0,0 +1 @@ +OBMDQFSH=YBCZEFGHTQKL=M diff --git a/utils/cubes/move_36_M.txt b/utils/cubes/move_36_M.txt @@ -0,0 +1 @@ +WUXVKILJ=ABCDIJKLHGFE=W diff --git a/utils/cubes/move_37_M2.txt b/utils/cubes/move_37_M2.txt @@ -0,0 +1 @@ +DCBAHGFE=ABCDHGFELKJI=G diff --git a/utils/cubes/move_38_M3.txt b/utils/cubes/move_38_M3.txt @@ -0,0 +1 @@ +VXUWJLIK=ABCDLKJIEFGH=Q diff --git a/utils/cubes/move_39_S.txt b/utils/cubes/move_39_S.txt @@ -0,0 +1 @@ +ONMPQTSR=YbaZEFGHTQRS=M diff --git a/utils/cubes/move_40_S2.txt b/utils/cubes/move_40_S2.txt @@ -0,0 +1 @@ +CDABGHEF=DCBAEFGHJILK=E diff --git a/utils/cubes/move_41_S3.txt b/utils/cubes/move_41_S3.txt @@ -0,0 +1 @@ +MPONSRQT=ZabYEFGHQTSR=I diff --git a/utils/cubes/move_42_E.txt b/utils/cubes/move_42_E.txt @@ -0,0 +1 @@ +FEGHABDC=EFGHBADCIJKL=D diff --git a/utils/cubes/move_43_E2.txt b/utils/cubes/move_43_E2.txt @@ -0,0 +1 @@ +BADCFEHG=BADCFEHGIJKL=C diff --git a/utils/cubes/move_44_E3.txt b/utils/cubes/move_44_E3.txt @@ -0,0 +1 @@ +EFHGBACD=FEHGABCDIJKL=B diff --git a/utils/cubes/move_45_x.txt b/utils/cubes/move_45_x.txt @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=Q diff --git a/utils/cubes/move_46_x2.txt b/utils/cubes/move_46_x2.txt @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=G diff --git a/utils/cubes/move_47_x3.txt b/utils/cubes/move_47_x3.txt @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=W diff --git a/utils/cubes/move_48_y.txt b/utils/cubes/move_48_y.txt @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=B diff --git a/utils/cubes/move_49_y2.txt b/utils/cubes/move_49_y2.txt @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=C diff --git a/utils/cubes/move_50_y3.txt b/utils/cubes/move_50_y3.txt @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=D diff --git a/utils/cubes/move_51_z.txt b/utils/cubes/move_51_z.txt @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=M diff --git a/utils/cubes/move_52_z2.txt b/utils/cubes/move_52_z2.txt @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=E diff --git a/utils/cubes/move_53_z3.txt b/utils/cubes/move_53_z3.txt @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=I diff --git a/utils/extended_trans/500_DLr_Uw.in b/utils/extended_trans/500_DLr_Uw.in @@ -0,0 +1,2 @@ +rotation DL +Uw diff --git a/utils/extended_trans/500_DLr_Uw.out b/utils/extended_trans/500_DLr_Uw.out @@ -0,0 +1 @@ +FECDABGH=EFCDBAGHIJKL=D diff --git a/utils/extended_trans/501_RBr_Lw3.in b/utils/extended_trans/501_RBr_Lw3.in @@ -0,0 +1,2 @@ +rotation RB +Lw3 diff --git a/utils/extended_trans/501_RBr_Lw3.out b/utils/extended_trans/501_RBr_Lw3.out @@ -0,0 +1 @@ +FECDABGH=EFCDBAGHIJKL=D diff --git a/utils/extended_trans/502_FLm_Fw.in b/utils/extended_trans/502_FLm_Fw.in @@ -0,0 +1,2 @@ +mirrored FL +Fw diff --git a/utils/extended_trans/502_FLm_Fw.out b/utils/extended_trans/502_FLm_Fw.out @@ -0,0 +1 @@ +AUXDKFGJ=ABCDEJKHIGFL=W diff --git a/utils/extended_trans/600_BDr_M3.in b/utils/extended_trans/600_BDr_M3.in @@ -0,0 +1,2 @@ +rotation BD +M' diff --git a/utils/extended_trans/600_BDr_M3.out b/utils/extended_trans/600_BDr_M3.out @@ -0,0 +1 @@ +WUXVKILJ=ABCDIJKLHGFE=W diff --git a/utils/extended_trans/601_LDm_E.in b/utils/extended_trans/601_LDm_E.in @@ -0,0 +1,2 @@ +mirrored LD +E diff --git a/utils/extended_trans/601_LDm_E.out b/utils/extended_trans/601_LDm_E.out @@ -0,0 +1 @@ +VXUWJLIK=ABCDLKJIEFGH=Q diff --git a/utils/extended_trans/602_FDm_S.in b/utils/extended_trans/602_FDm_S.in @@ -0,0 +1,2 @@ +mirrored FD +S diff --git a/utils/extended_trans/602_FDm_S.out b/utils/extended_trans/602_FDm_S.out @@ -0,0 +1 @@ +EFHGBACD=FEHGABCDIJKL=B diff --git a/utils/extended_trans/700_FRr_x.in b/utils/extended_trans/700_FRr_x.in @@ -0,0 +1,2 @@ +rotation FR +x diff --git a/utils/extended_trans/700_FRr_x.out b/utils/extended_trans/700_FRr_x.out @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=B diff --git a/utils/extended_trans/701_BDm_z3.in b/utils/extended_trans/701_BDm_z3.in @@ -0,0 +1,2 @@ +mirrored BD +z3 diff --git a/utils/extended_trans/701_BDm_z3.out b/utils/extended_trans/701_BDm_z3.out @@ -0,0 +1 @@ +ABCDEFGH=ABCDEFGHIJKL=D diff --git a/utils/extended_trans/README b/utils/extended_trans/README @@ -0,0 +1,3 @@ +This folder contains test files for 062_transform_move. +They are not currently used. +They have not been tested, so they may be wrong.