commit 869d852bd7bf0531af4605773615c0bf0c911d48
parent 1809d7b212128fcdcb481002a17db5dc97a15e03
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date: Fri, 17 May 2024 19:45:11 +0200
Prepare for next step
Diffstat:
19 files changed, 60 insertions(+), 11 deletions(-)
diff --git a/TODO.txt b/TODO.txt
@@ -1,8 +1,8 @@
In progress: go back to nissy-style BFS for eosep data computation
- (done) compute selfsim and cocsep representatives
- (done) implement set_eo_fast for invcoord_h48
+ - for invcoord_h48 remove erep, implement inverse esep coord
- add unit tests for invcoord_h48 (compute tables, if needed)
- - in gendata_esep, compute representatives for esep inverse coordinate
- change to BFS
TODO pruning tables:
diff --git a/src/cube_avx2.h b/src/cube_avx2.h
@@ -28,6 +28,7 @@ _static_inline int64_t coord_fast_esep(cube_fast_t);
_static_inline void copy_corners_fast(cube_fast_t *, cube_fast_t);
_static_inline void copy_edges_fast(cube_fast_t *, cube_fast_t);
_static_inline void set_eo_fast(cube_fast_t *, int64_t);
+_static_inline cube_fast_t invcoord_fast_esep(int64_t);
_static_inline cube_fast_t
fastcube(
@@ -268,3 +269,10 @@ set_eo_fast(cube_fast_t *cube, int64_t eo)
*cube = _mm256_andnot_si256(_eo_avx2, *cube);
*cube = _mm256_or_si256(*cube, veo);
}
+
+_static_inline cube_fast_t
+invcoord_fast_esep(int64_t esep)
+{
+ /* TODO */
+ return cubetofast(zero);
+}
diff --git a/src/cube_portable.h b/src/cube_portable.h
@@ -22,6 +22,7 @@ _static_inline int64_t coord_fast_esep(cube_fast_t);
_static_inline void copy_corners_fast(cube_fast_t *, cube_fast_t);
_static_inline void copy_edges_fast(cube_fast_t *, cube_fast_t);
_static_inline void set_eo_fast(cube_fast_t *, int64_t);
+_static_inline cube_fast_t invcoord_fast_esep(int64_t);
_static_inline cube_fast_t
fastcube(
@@ -251,3 +252,10 @@ set_eo_fast(cube_fast_t *cube, int64_t eo)
}
cube->edge[0] = (cube->edge[0] & ~_eobit) | (_eobit * (sum%2));
}
+
+_static_inline cube_fast_t
+invcoord_fast_esep(int64_t esep)
+{
+ /* TODO */
+ return cubetofast(zero);
+}
diff --git a/src/solve_h48.h b/src/solve_h48.h
@@ -39,8 +39,7 @@ typedef struct {
} dfsarg_esep_t;
_static_inline int64_t coord_h48(cube_fast_t, const uint32_t *, uint8_t);
-_static_inline cube_fast_t invcoord_h48(int64_t, const uint32_t *,
- const cube_fast_t *, const cube_fast_t *, uint8_t);
+_static_inline cube_fast_t invcoord_h48(int64_t, const cube_fast_t *, uint8_t);
_static size_t gendata_cocsep(void *, uint64_t *, cube_fast_t *);
_static uint32_t gendata_cocsep_dfs(dfsarg_cocsep_t *);
@@ -77,13 +76,7 @@ coord_h48(cube_fast_t c, const uint32_t *cocsepdata, uint8_t h)
}
_static_inline cube_fast_t
-invcoord_h48(
- int64_t i,
- const uint32_t *cocsepdata,
- const cube_fast_t *crep,
- const cube_fast_t *erep,
- uint8_t h
-)
+invcoord_h48(int64_t i, const cube_fast_t *crep, uint8_t h)
{
cube_fast_t ret;
int64_t coclass, ee, esep, eo;
@@ -96,8 +89,8 @@ invcoord_h48(
esep = ee >> h;
eo = (ee & ((1<<h)-1)) << (11-h);
+ ret = invcoord_fast_esep(esep);
copy_corners_fast(&ret, crep[coclass]);
- copy_edges_fast(&ret, erep[esep]);
set_eo_fast(&ret, eo);
return ret;
diff --git a/test/078_invcoord_esep/00_solved.in b/test/078_invcoord_esep/00_solved.in
@@ -0,0 +1 @@
+UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/078_invcoord_esep/00_solved.out b/test/078_invcoord_esep/00_solved.out
@@ -0,0 +1 @@
+0
diff --git a/test/078_invcoord_esep/01_U.in b/test/078_invcoord_esep/01_U.in
@@ -0,0 +1 @@
+UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/078_invcoord_esep/01_U.out b/test/078_invcoord_esep/01_U.out
@@ -0,0 +1 @@
+55
diff --git a/test/078_invcoord_esep/02_U2.in b/test/078_invcoord_esep/02_U2.in
@@ -0,0 +1 @@
+UB0 UF0 DB0 DF0 UL0 UR0 DL0 DR0 FR0 FL0 BL0 BR0 UBL0 UFR0 DFL0 DBR0 UBR0 UFL0 DFR0 DBL0
diff --git a/test/078_invcoord_esep/02_U2.out b/test/078_invcoord_esep/02_U2.out
@@ -0,0 +1 @@
+0
diff --git a/test/078_invcoord_esep/20_scrambled.in b/test/078_invcoord_esep/20_scrambled.in
@@ -0,0 +1,3 @@
+UL0 BL0 BR1 DL0 FR0 DF0 DB1 DR1 UB0 FL0 UF0 UR1 DFL0 UFR1 DBR1 UBR2 DBL2 DFR0 UFL1 UBL2
+
+// Scramble: U R D' L D' F L2 D L F B D2 B' L2 F U2 L2 D2 R2 L2 B'
diff --git a/test/078_invcoord_esep/20_scrambled.out b/test/078_invcoord_esep/20_scrambled.out
@@ -0,0 +1 @@
+22248
diff --git a/test/078_invcoord_esep/21_swapaxis_FB.in b/test/078_invcoord_esep/21_swapaxis_FB.in
@@ -0,0 +1 @@
+FR0 BR0 BL0 FL0 UR0 UL0 DL0 DR0 DF0 UF0 UB0 DB0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/078_invcoord_esep/21_swapaxis_FB.out b/test/078_invcoord_esep/21_swapaxis_FB.out
@@ -0,0 +1 @@
+34649
diff --git a/test/078_invcoord_esep/22_swapaxis_RL.in b/test/078_invcoord_esep/22_swapaxis_RL.in
@@ -0,0 +1 @@
+UF0 UB0 DB0 DF0 FR0 FL0 BL0 BR0 DR0 DL0 UL0 UR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/078_invcoord_esep/22_swapaxis_RL.out b/test/078_invcoord_esep/22_swapaxis_RL.out
@@ -0,0 +1 @@
+4830
diff --git a/test/078_invcoord_esep/23_swapaxis_UD.in b/test/078_invcoord_esep/23_swapaxis_UD.in
@@ -0,0 +1 @@
+UR0 UL0 DL0 DR0 UB0 UF0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/078_invcoord_esep/23_swapaxis_UD.out b/test/078_invcoord_esep/23_swapaxis_UD.out
@@ -0,0 +1 @@
+69
diff --git a/test/078_invcoord_esep/invcoord_esep_tests.c b/test/078_invcoord_esep/invcoord_esep_tests.c
@@ -0,0 +1,24 @@
+#include "../test.h"
+
+int64_t coord_fast_esep(cube_fast_t);
+cube_fast_t invcoord_fast_esep(int64_t);
+cube_fast_t cubetofast(cube_t);
+
+int main(void) {
+ char str[STRLENMAX];
+ cube_t cube;
+ cube_fast_t fast;
+ int64_t i;
+
+ fgets(str, STRLENMAX, stdin);
+ cube = readcube("H48", str);
+ fast = cubetofast(cube);
+
+ i = coord_fast_esep(fast);
+ fast = invcoord_fast_esep(i);
+ i = coord_fast_esep(fast);
+
+ printf("%" PRId64 "\n", i);
+
+ return 0;
+}