aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO.txt2
-rw-r--r--cube.c45
-rw-r--r--test/071_coord_eo/coord_eo_tests.c4
-rw-r--r--test/072_coord_co/00_solved.in1
-rw-r--r--test/072_coord_co/00_solved.out1
-rw-r--r--test/072_coord_co/01_U.in1
-rw-r--r--test/072_coord_co/01_U.out1
-rw-r--r--test/072_coord_co/02_U2.in1
-rw-r--r--test/072_coord_co/02_U2.out1
-rw-r--r--test/072_coord_co/03_U3.in1
-rw-r--r--test/072_coord_co/03_U3.out1
-rw-r--r--test/072_coord_co/04_D.in1
-rw-r--r--test/072_coord_co/04_D.out1
-rw-r--r--test/072_coord_co/07_R.in1
-rw-r--r--test/072_coord_co/07_R.out1
-rw-r--r--test/072_coord_co/08_R2.in1
-rw-r--r--test/072_coord_co/08_R2.out1
-rw-r--r--test/072_coord_co/10_L.in1
-rw-r--r--test/072_coord_co/10_L.out1
-rw-r--r--test/072_coord_co/13_F.in1
-rw-r--r--test/072_coord_co/13_F.out1
-rw-r--r--test/072_coord_co/14_F2.in1
-rw-r--r--test/072_coord_co/14_F2.out1
-rw-r--r--test/072_coord_co/16_B.in1
-rw-r--r--test/072_coord_co/16_B.out1
-rw-r--r--test/072_coord_co/17_B2.in1
-rw-r--r--test/072_coord_co/17_B2.out1
-rw-r--r--test/072_coord_co/20_scrambled.in3
-rw-r--r--test/072_coord_co/20_scrambled.out1
-rw-r--r--test/072_coord_co/coord_co_tests.c21
30 files changed, 94 insertions, 6 deletions
diff --git a/TODO.txt b/TODO.txt
index 3d3c430..68f89c5 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -1,5 +1,7 @@
1## (find better name) H48 solver, ideas 1## (find better name) H48 solver, ideas
2 2
3TODO next: implement cosep coordinate
4
3First compute co + csep. Use csep as a binary number (2^8 instead of 70, 5First compute co + csep. Use csep as a binary number (2^8 instead of 70,
4loose a factor of 3.66 but still fits in a few megabytes or less). Use 6loose a factor of 3.66 but still fits in a few megabytes or less). Use
5co + csep as an index in a table whose entries have: 6 bits for ttrep, 7co + csep as an index in a table whose entries have: 6 bits for ttrep,
diff --git a/cube.c b/cube.c
index e150765..b6e1a4e 100644
--- a/cube.c
+++ b/cube.c
@@ -509,6 +509,8 @@ _static_inline bool equal_fast(cube_fast_t, cube_fast_t);
509_static_inline bool issolved_fast(cube_fast_t); 509_static_inline bool issolved_fast(cube_fast_t);
510_static_inline cube_fast_t invertco_fast(cube_fast_t); 510_static_inline cube_fast_t invertco_fast(cube_fast_t);
511_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t); 511_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t);
512
513_static_inline int64_t coord_fast_co(cube_fast_t);
512_static_inline int64_t coord_fast_eo(cube_fast_t); 514_static_inline int64_t coord_fast_eo(cube_fast_t);
513 515
514_static_inline cube_fast_t 516_static_inline cube_fast_t
@@ -637,6 +639,22 @@ compose_fast(cube_fast_t c1, cube_fast_t c2)
637} 639}
638 640
639_static_inline int64_t 641_static_inline int64_t
642coord_fast_co(cube_fast_t c)
643{
644 cube_fast_t co, shifted;
645 int64_t mem[4], ret, i, p;
646
647 co = _mm256_and_si256(c, _co2_avx2);
648 _mm256_storeu_si256((__m256i *)mem, co);
649
650 mem[0] >>= 5L;
651 for (i = 0, ret = 0, p = 1; i < 7; i++, mem[0] >>= 8L, p *= 3)
652 ret += (mem[0] & 3L) * p;
653
654 return ret;
655}
656
657_static_inline int64_t
640coord_fast_eo(cube_fast_t c) 658coord_fast_eo(cube_fast_t c)
641{ 659{
642 cube_fast_t eo, shifted; 660 cube_fast_t eo, shifted;
@@ -689,6 +707,8 @@ _static_inline bool equal_fast(cube_fast_t, cube_fast_t);
689_static_inline bool issolved_fast(cube_fast_t); 707_static_inline bool issolved_fast(cube_fast_t);
690_static_inline cube_fast_t invertco_fast(cube_fast_t); 708_static_inline cube_fast_t invertco_fast(cube_fast_t);
691_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t); 709_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t);
710
711_static_inline int64_t coord_fast_co(cube_fast_t);
692_static_inline int64_t coord_fast_eo(cube_fast_t); 712_static_inline int64_t coord_fast_eo(cube_fast_t);
693 713
694_static_inline cube_fast_t 714_static_inline cube_fast_t
@@ -812,14 +832,25 @@ compose_fast(cube_fast_t c1, cube_fast_t c2)
812} 832}
813 833
814_static_inline int64_t 834_static_inline int64_t
815coord_fast_eo(cube_fast_t cube) 835coord_fast_co(cube_fast_t c)
816{ 836{
817 int i, p; 837 int i, p;
818 int64_t ret; 838 int64_t ret;
819 839
820 ret = 0; 840 for (ret = 0, i = 0, p = 1; i < 7; i++, p *= 3)
821 for (i = 1, p = 1; i < 12; i++, p *= 2) 841 ret += p * (c.corner[i] >> _coshift);
822 ret += p * (cube.edge[i] >> 4); 842
843 return ret;
844}
845
846_static_inline int64_t
847coord_fast_eo(cube_fast_t c)
848{
849 int i, p;
850 int64_t ret;
851
852 for (ret = 0, i = 1, p = 1; i < 12; i++, p *= 2)
853 ret += p * (c.edge[i] >> _eoshift);
823 854
824 return ret; 855 return ret;
825} 856}
@@ -1600,6 +1631,12 @@ moveaxis(uint8_t move)
1600} 1631}
1601 1632
1602/****************************************************************************** 1633/******************************************************************************
1634Section: auxiliary procedures for H48 optimal solver (temporary)
1635******************************************************************************/
1636
1637
1638
1639/******************************************************************************
1603Section: solvers 1640Section: solvers
1604 1641
1605Here you can find the implementation of all the solving algorithms. 1642Here you can find the implementation of all the solving algorithms.
diff --git a/test/071_coord_eo/coord_eo_tests.c b/test/071_coord_eo/coord_eo_tests.c
index 6c18a73..85128e0 100644
--- a/test/071_coord_eo/coord_eo_tests.c
+++ b/test/071_coord_eo/coord_eo_tests.c
@@ -7,7 +7,7 @@ int main(void) {
7 char str[STRLENMAX]; 7 char str[STRLENMAX];
8 cube_t cube; 8 cube_t cube;
9 cube_fast_t fast; 9 cube_fast_t fast;
10 int16_t result; 10 int64_t result;
11 11
12 fgets(str, STRLENMAX, stdin); 12 fgets(str, STRLENMAX, stdin);
13 cube = readcube("H48", str); 13 cube = readcube("H48", str);
@@ -15,7 +15,7 @@ int main(void) {
15 15
16 result = coord_fast_eo(fast); 16 result = coord_fast_eo(fast);
17 17
18 printf("%" PRId16 "\n", result); 18 printf("%" PRId64 "\n", result);
19 19
20 return 0; 20 return 0;
21} 21}
diff --git a/test/072_coord_co/00_solved.in b/test/072_coord_co/00_solved.in
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/072_coord_co/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/072_coord_co/00_solved.out b/test/072_coord_co/00_solved.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/00_solved.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/01_U.in b/test/072_coord_co/01_U.in
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/072_coord_co/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/072_coord_co/01_U.out b/test/072_coord_co/01_U.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/01_U.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/02_U2.in b/test/072_coord_co/02_U2.in
new file mode 100644
index 0000000..316ad57
--- /dev/null
+++ b/test/072_coord_co/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/072_coord_co/02_U2.out b/test/072_coord_co/02_U2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/02_U2.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/03_U3.in b/test/072_coord_co/03_U3.in
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/072_coord_co/03_U3.in
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/072_coord_co/03_U3.out b/test/072_coord_co/03_U3.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/03_U3.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/04_D.in b/test/072_coord_co/04_D.in
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/072_coord_co/04_D.in
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/072_coord_co/04_D.out b/test/072_coord_co/04_D.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/04_D.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/07_R.in b/test/072_coord_co/07_R.in
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/072_coord_co/07_R.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/072_coord_co/07_R.out b/test/072_coord_co/07_R.out
new file mode 100644
index 0000000..1f3d8a7
--- /dev/null
+++ b/test/072_coord_co/07_R.out
@@ -0,0 +1 @@
1028
diff --git a/test/072_coord_co/08_R2.in b/test/072_coord_co/08_R2.in
new file mode 100644
index 0000000..90765e2
--- /dev/null
+++ b/test/072_coord_co/08_R2.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 DR0 UL0 DL0 UR0 BR0 FL0 BL0 FR0 DBR0 UBL0 DFL0 UFR0 UFL0 DFR0 UBR0 DBL0
diff --git a/test/072_coord_co/08_R2.out b/test/072_coord_co/08_R2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/08_R2.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/10_L.in b/test/072_coord_co/10_L.in
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/072_coord_co/10_L.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/072_coord_co/10_L.out b/test/072_coord_co/10_L.out
new file mode 100644
index 0000000..f96ac06
--- /dev/null
+++ b/test/072_coord_co/10_L.out
@@ -0,0 +1 @@
105
diff --git a/test/072_coord_co/13_F.in b/test/072_coord_co/13_F.in
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/072_coord_co/13_F.in
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/072_coord_co/13_F.out b/test/072_coord_co/13_F.out
new file mode 100644
index 0000000..86868c5
--- /dev/null
+++ b/test/072_coord_co/13_F.out
@@ -0,0 +1 @@
1630
diff --git a/test/072_coord_co/14_F2.in b/test/072_coord_co/14_F2.in
new file mode 100644
index 0000000..8aa701f
--- /dev/null
+++ b/test/072_coord_co/14_F2.in
@@ -0,0 +1 @@
DF0 UB0 DB0 UF0 UR0 UL0 DL0 DR0 FL0 FR0 BL0 BR0 DFL0 UBL0 UFR0 DBR0 DFR0 UBR0 UFL0 DBL0
diff --git a/test/072_coord_co/14_F2.out b/test/072_coord_co/14_F2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/14_F2.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/16_B.in b/test/072_coord_co/16_B.in
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/072_coord_co/16_B.in
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/072_coord_co/16_B.out b/test/072_coord_co/16_B.out
new file mode 100644
index 0000000..1c599d4
--- /dev/null
+++ b/test/072_coord_co/16_B.out
@@ -0,0 +1 @@
516
diff --git a/test/072_coord_co/17_B2.in b/test/072_coord_co/17_B2.in
new file mode 100644
index 0000000..9b33e35
--- /dev/null
+++ b/test/072_coord_co/17_B2.in
@@ -0,0 +1 @@
UF0 DB0 UB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BR0 BL0 UFR0 DBR0 DFL0 UBL0 UFL0 DBL0 DFR0 UBR0
diff --git a/test/072_coord_co/17_B2.out b/test/072_coord_co/17_B2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/17_B2.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/20_scrambled.in b/test/072_coord_co/20_scrambled.in
new file mode 100644
index 0000000..274d30b
--- /dev/null
+++ b/test/072_coord_co/20_scrambled.in
@@ -0,0 +1,3 @@
1UL0 BL0 BR1 DL0 FR0 DF0 DB1 DR1 UB0 FL0 UF0 UR1 DFL0 UFR1 DBR1 UBR2 DBL2 DFR0 UFL1 UBL2
2
3// 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/072_coord_co/20_scrambled.out b/test/072_coord_co/20_scrambled.out
new file mode 100644
index 0000000..6943e4d
--- /dev/null
+++ b/test/072_coord_co/20_scrambled.out
@@ -0,0 +1 @@
957
diff --git a/test/072_coord_co/coord_co_tests.c b/test/072_coord_co/coord_co_tests.c
new file mode 100644
index 0000000..bb061e5
--- /dev/null
+++ b/test/072_coord_co/coord_co_tests.c
@@ -0,0 +1,21 @@
1#include "../test.h"
2
3int64_t coord_fast_co(cube_fast_t);
4cube_fast_t cubetofast(cube_t);
5
6int main(void) {
7 char str[STRLENMAX];
8 cube_t cube;
9 cube_fast_t fast;
10 int64_t result;
11
12 fgets(str, STRLENMAX, stdin);
13 cube = readcube("H48", str);
14 fast = cubetofast(cube);
15
16 result = coord_fast_co(fast);
17
18 printf("%" PRId64 "\n", result);
19
20 return 0;
21}

Generated with cgit - Back to sebastiano.tronto.net