aboutsummaryrefslogtreecommitdiff
path: root/src/alg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/alg.c')
-rw-r--r--src/alg.c105
1 files changed, 37 insertions, 68 deletions
diff --git a/src/alg.c b/src/alg.c
index 52bebc0..47e222b 100644
--- a/src/alg.c
+++ b/src/alg.c
@@ -1,68 +1,18 @@
1#include "alg.h" 1#define ALG_C
2 2
3/* Local functions ***********************************************************/ 3#include "alg.h"
4 4
5static bool allowed_HTM(Move m);
6static bool allowed_URF(Move m);
7static bool allowed_eofb(Move m);
8static bool allowed_drud(Move m);
9static bool allowed_htr(Move m);
10static bool allowed_next_HTM(Move l2, Move l1, Move m);
11static int axis(Move m); 5static int axis(Move m);
12
13static void free_alglistnode(AlgListNode *aln); 6static void free_alglistnode(AlgListNode *aln);
14static void realloc_alg(Alg *alg, int n); 7static void realloc_alg(Alg *alg, int n);
15 8
16/* Movesets ******************************************************************/ 9bool
17
18Moveset
19moveset_HTM = {
20 .allowed = allowed_HTM,
21 .allowed_next = allowed_next_HTM,
22};
23
24Moveset
25moveset_URF = {
26 .allowed = allowed_URF,
27 .allowed_next = allowed_next_HTM,
28};
29
30Moveset
31moveset_eofb = {
32 .allowed = allowed_eofb,
33 .allowed_next = allowed_next_HTM,
34};
35
36Moveset
37moveset_drud = {
38 .allowed = allowed_drud,
39 .allowed_next = allowed_next_HTM,
40};
41
42Moveset
43moveset_htr = {
44 .allowed = allowed_htr,
45 .allowed_next = allowed_next_HTM,
46};
47
48static int nmoveset = 5;
49static Moveset * all_ms[] = {
50 &moveset_HTM,
51 &moveset_URF,
52 &moveset_eofb,
53 &moveset_drud,
54 &moveset_htr,
55};
56
57/* Functions *****************************************************************/
58
59static bool
60allowed_HTM(Move m) 10allowed_HTM(Move m)
61{ 11{
62 return m >= U && m <= B3; 12 return m >= U && m <= B3;
63} 13}
64 14
65static bool 15bool
66allowed_URF(Move m) 16allowed_URF(Move m)
67{ 17{
68 Move b = base_move(m); 18 Move b = base_move(m);
@@ -70,7 +20,7 @@ allowed_URF(Move m)
70 return b == U || b == R || b == F; 20 return b == U || b == R || b == F;
71} 21}
72 22
73static bool 23bool
74allowed_eofb(Move m) 24allowed_eofb(Move m)
75{ 25{
76 Move b = base_move(m); 26 Move b = base_move(m);
@@ -79,7 +29,7 @@ allowed_eofb(Move m)
79 ((b == F || b == B) && m == b+1); 29 ((b == F || b == B) && m == b+1);
80} 30}
81 31
82static bool 32bool
83allowed_drud(Move m) 33allowed_drud(Move m)
84{ 34{
85 Move b = base_move(m); 35 Move b = base_move(m);
@@ -88,7 +38,7 @@ allowed_drud(Move m)
88 ((b == R || b == L || b == F || b == B) && m == b + 1); 38 ((b == R || b == L || b == F || b == B) && m == b + 1);
89} 39}
90 40
91static bool 41bool
92allowed_htr(Move m) 42allowed_htr(Move m)
93{ 43{
94 Move b = base_move(m); 44 Move b = base_move(m);
@@ -96,8 +46,8 @@ allowed_htr(Move m)
96 return moveset_HTM.allowed(m) && m == b + 1; 46 return moveset_HTM.allowed(m) && m == b + 1;
97} 47}
98 48
99static bool 49bool
100allowed_next_HTM(Move l2, Move l1, Move m) 50allowed_next_all(Move l2, Move l1, Move m)
101{ 51{
102 bool p, q; 52 bool p, q;
103 53
@@ -469,6 +419,34 @@ swapmove(Move *m1, Move *m2)
469 *m2 = aux; 419 *m2 = aux;
470} 420}
471 421
422char *
423trans_string(Trans t)
424{
425 static char trans_string_aux[NTRANS][20] = {
426 [uf] = "uf", [ur] = "ur", [ub] = "ub", [ul] = "ul",
427 [df] = "df", [dr] = "dr", [db] = "db", [dl] = "dl",
428 [rf] = "rf", [rd] = "rd", [rb] = "rb", [ru] = "ru",
429 [lf] = "lf", [ld] = "ld", [lb] = "lb", [lu] = "lu",
430 [fu] = "fu", [fr] = "fr", [fd] = "fd", [fl] = "fl",
431 [bu] = "bu", [br] = "br", [bd] = "bd", [bl] = "bl",
432
433 [uf_mirror] = "uf*", [ur_mirror] = "ur*",
434 [ub_mirror] = "ub*", [ul_mirror] = "ul*",
435 [df_mirror] = "df*", [dr_mirror] = "dr*",
436 [db_mirror] = "db*", [dl_mirror] = "dl*",
437 [rf_mirror] = "rf*", [rd_mirror] = "rd*",
438 [rb_mirror] = "rb*", [ru_mirror] = "ru*",
439 [lf_mirror] = "lf*", [ld_mirror] = "ld*",
440 [lb_mirror] = "lb*", [lu_mirror] = "lu*",
441 [fu_mirror] = "fu*", [fr_mirror] = "fr*",
442 [fd_mirror] = "fd*", [fl_mirror] = "fl*",
443 [bu_mirror] = "bu*", [br_mirror] = "br*",
444 [bd_mirror] = "bd*", [bl_mirror] = "bl*",
445 };
446
447 return trans_string_aux[t];
448}
449
472Alg * 450Alg *
473unniss(Alg *alg) 451unniss(Alg *alg)
474{ 452{
@@ -513,12 +491,3 @@ init_moveset(Moveset *ms)
513 } 491 }
514 } 492 }
515} 493}
516
517void
518init_all_movesets()
519{
520 int i;
521
522 for (i = 0; i < nmoveset; i++)
523 init_moveset(all_ms[i]);
524}

Generated with cgit - Back to sebastiano.tronto.net