From 81daed66c3415827de7ab6a15c081a8f696f7a95 Mon Sep 17 00:00:00 2001 From: enricotenuti Date: Mon, 26 Aug 2024 17:56:17 +0200 Subject: premoves and niss --- src/core/cube.h | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) (limited to 'src/core/cube.h') diff --git a/src/core/cube.h b/src/core/cube.h index fe36f90..b24fb5c 100644 --- a/src/core/cube.h +++ b/src/core/cube.h @@ -285,6 +285,113 @@ move(cube_t c, uint8_t m) } } +_static cube_t +premove(cube_t c, uint8_t m){ + switch (m) { + case _move_U: + return _premove(U3, c); + case _move_U2: + return _premove(U2, c); + case _move_U3: + return _premove(U, c); + case _move_D: + return _premove(D3, c); + case _move_D2: + return _premove(D2, c); + case _move_D3: + return _premove(D, c); + case _move_R: + return _premove(R3, c); + case _move_R2: + return _premove(R2, c); + case _move_R3: + return _premove(R, c); + case _move_L: + return _premove(L3, c); + case _move_L2: + return _premove(L2, c); + case _move_L3: + return _premove(L, c); + case _move_F: + return _premove(F3, c); + case _move_F2: + return _premove(F2, c); + case _move_F3: + return _premove(F, c); + case _move_B: + return _premove(B3, c); + case _move_B2: + return _premove(B2, c); + case _move_B3: + return _premove(B, c); + default: + LOG("move error, unknown move\n"); + return zero; + } +} +_static uint8_t +invertmove(uint8_t m) +{ + switch (m) { + case _move_U: + return _move_U3; + case _move_U2: + return _move_U2; + case _move_U3: + return _move_U; + case _move_D: + return _move_D3; + case _move_D2: + return _move_D2; + case _move_D3: + return _move_D; + case _move_R: + return _move_R3; + case _move_R2: + return _move_R2; + case _move_R3: + return _move_R; + case _move_L: + return _move_L3; + case _move_L2: + return _move_L2; + case _move_L3: + return _move_L; + case _move_F: + return _move_F3; + case _move_F2: + return _move_F2; + case _move_F3: + return _move_F; + case _move_B: + return _move_B3; + case _move_B2: + return _move_B2; + case _move_B3: + return _move_B; + default: + LOG("invertmove error, unknown move\n"); + return _error; + } +} + +_static uint8_t* +invertpremoves(uint8_t *moves, uint8_t nmoves) +{ + uint8_t i; + uint8_t *ret = malloc(nmoves * sizeof(uint8_t)); + + for (i = 0; i < nmoves; i++) + ret[i] = invertmove(moves[i]); + + // invert elements in the array + for (i = 0; i < nmoves / 2; i++) + _swap(ret[i], ret[nmoves - i - 1]); + return ret; +} + + + /* TODO transform is now relegated to a separated file because it is too long. It would be nice to make it shorter without loosing performance. -- cgit v1.3