aboutsummaryrefslogtreecommitdiff
path: root/src/cube_generic.h
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2024-07-05 22:16:44 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2024-07-05 22:28:10 +0200
commit66c1c11ec13d362ddfb1b5f6abe8127969c0ad29 (patch)
tree569e7d4e70d63202c05475b0996038b90da168c5 /src/cube_generic.h
parent5fb58d73581256c64d47250c5544d1cbf22f79c3 (diff)
downloadnissy-core-66c1c11ec13d362ddfb1b5f6abe8127969c0ad29.tar.gz
nissy-core-66c1c11ec13d362ddfb1b5f6abe8127969c0ad29.zip
Finished getcube
Diffstat (limited to '')
-rw-r--r--src/cube_generic.h37
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
186getcube_fix(int64_t *ep, int64_t *eo, int64_t *cp, int64_t *co) 186getcube_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
206getcube(int64_t ep, int64_t eo, int64_t cp, int64_t co) 208getcube(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

Generated with cgit - Back to sebastiano.tronto.net