From 413cc53c97f5a665bf84098b47e8d2267002f3ce Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Sat, 18 May 2024 19:32:31 +0200 Subject: Added esep inverse coord --- src/cube_portable.h | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'src/cube_portable.h') diff --git a/src/cube_portable.h b/src/cube_portable.h index 24c39e8..cb4d8fc 100644 --- a/src/cube_portable.h +++ b/src/cube_portable.h @@ -256,6 +256,31 @@ set_eo_fast(cube_fast_t *cube, int64_t eo) _static_inline cube_fast_t invcoord_fast_esep(int64_t esep) { - /* TODO */ - return cubetofast(zero); + cube_fast_t ret; + int64_t i, j, k, l, s, v, w, is1, set1, set2; + uint8_t bit2, bit1; + uint8_t slice[3] = {0}; + + ret = cubetofast(solved); + set1 = esep % 70; + set2 = esep / 70; + + for (i = 0, j = 0, k = 4, l = 4; i < 12; i++) { + v = binomial[11-i][k]; + w = binomial[7-j][l]; + bit2 = set2 >= v; + bit1 = set1 >= w; + is1 = (1 - bit2) * bit1; + + set2 -= bit2 * v; + k -= bit2; + set1 -= is1 * w; + l -= is1; + j += (1-bit2); + s = 2*bit2 + (1-bit2)*bit1; + + ret.edge[i] = (slice[s]++) | (s << 2); + } + + return ret; } -- cgit v1.3