diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2024-07-05 22:16:44 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2024-07-05 22:28:10 +0200 |
| commit | 66c1c11ec13d362ddfb1b5f6abe8127969c0ad29 (patch) | |
| tree | 569e7d4e70d63202c05475b0996038b90da168c5 /src/cube_generic.h | |
| parent | 5fb58d73581256c64d47250c5544d1cbf22f79c3 (diff) | |
| download | nissy-core-66c1c11ec13d362ddfb1b5f6abe8127969c0ad29.tar.gz nissy-core-66c1c11ec13d362ddfb1b5f6abe8127969c0ad29.zip | |
Finished getcube
Diffstat (limited to '')
| -rw-r--r-- | src/cube_generic.h | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/src/cube_generic.h b/src/cube_generic.h index c40844d..fe36f90 100644 --- a/src/cube_generic.h +++ b/src/cube_generic.h | |||
| @@ -185,34 +185,45 @@ frommoves(const char *buf) | |||
| 185 | _static void | 185 | _static void |
| 186 | getcube_fix(int64_t *ep, int64_t *eo, int64_t *cp, int64_t *co) | 186 | getcube_fix(int64_t *ep, int64_t *eo, int64_t *cp, int64_t *co) |
| 187 | { | 187 | { |
| 188 | uint8_t e[12], c[8], aux; | 188 | uint8_t e[12], c[8], coarr[8]; |
| 189 | 189 | ||
| 190 | *ep %= _12f; | 190 | *ep = (*ep % _12f + _12f) % _12f; |
| 191 | *eo %= _2p11; | 191 | *eo = (*eo % _2p11 + _2p11) % _2p11; |
| 192 | *cp %= _8f; | 192 | *cp = (*cp % _8f + _8f) % _8f; |
| 193 | *cp %= _3p7; | 193 | *co = (*cp % _3p7 + _3p7) % _3p7; |
| 194 | 194 | ||
| 195 | indextoperm(*ep, 12, e); | 195 | indextoperm(*ep, 12, e); |
| 196 | indextoperm(*cp, 8, c); | 196 | indextoperm(*cp, 8, c); |
| 197 | if (permsign(e, 12) != permsign(c, 8)) { | 197 | if (permsign(e, 12) != permsign(c, 8)) { |
| 198 | aux = c[0]; | 198 | _swap(c[0], c[1]); |
| 199 | c[0] = c[1]; | ||
| 200 | c[1] = aux; | ||
| 201 | *cp = permtoindex(c, 8); | 199 | *cp = permtoindex(c, 8); |
| 200 | |||
| 201 | sumzerotodigits(*co, 8, 3, coarr); | ||
| 202 | _swap(coarr[0], coarr[1]); | ||
| 203 | *co = digitstosumzero(coarr, 8, 3); | ||
| 202 | } | 204 | } |
| 203 | } | 205 | } |
| 204 | 206 | ||
| 205 | _static cube_t | 207 | _static cube_t |
| 206 | getcube(int64_t ep, int64_t eo, int64_t cp, int64_t co) | 208 | getcube(int64_t ep, int64_t eo, int64_t cp, int64_t co) |
| 207 | { | 209 | { |
| 208 | uint8_t e[12], c[8]; | 210 | uint8_t i, earr[12], carr[8], eoarr[12], coarr[8]; |
| 209 | 211 | ||
| 210 | indextoperm(ep, 12, e); | 212 | sumzerotodigits(eo, 12, 2, eoarr); |
| 211 | indextoperm(cp, 8, c); | 213 | DBG_ASSERT(eoarr[0] != _error, zero, "Error making EO"); |
| 214 | indextoperm(ep, 12, earr); | ||
| 215 | DBG_ASSERT(earr[0] != _error, zero, "Error making EP"); | ||
| 216 | for (i = 0; i < 12; i++) | ||
| 217 | earr[i] |= eoarr[i] << _eoshift; | ||
| 212 | 218 | ||
| 213 | /* TODO: orientation */ | 219 | sumzerotodigits(co, 8, 3, coarr); |
| 220 | DBG_ASSERT(coarr[0] != _error, zero, "Error making CO"); | ||
| 221 | indextoperm(cp, 8, carr); | ||
| 222 | DBG_ASSERT(carr[0] != _error, zero, "Error making CP"); | ||
| 223 | for (i = 0; i < 8; i++) | ||
| 224 | carr[i] |= coarr[i] << _coshift; | ||
| 214 | 225 | ||
| 215 | return cubefromarray(c, e); | 226 | return cubefromarray(carr, earr); |
| 216 | } | 227 | } |
| 217 | 228 | ||
| 218 | _static cube_t | 229 | _static cube_t |
