aboutsummaryrefslogtreecommitdiff
path: root/src/alg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/alg.c')
-rw-r--r--src/alg.c67
1 files changed, 37 insertions, 30 deletions
diff --git a/src/alg.c b/src/alg.c
index d9317ab..4c732a3 100644
--- a/src/alg.c
+++ b/src/alg.c
@@ -107,36 +107,6 @@ allowed_next_HTM(Move l2, Move l1, Move m)
107 return !(p || (commute(l1, l2) && q)); 107 return !(p || (commute(l1, l2) && q));
108} 108}
109 109
110static int
111axis(Move m)
112{
113 if (m == NULLMOVE)
114 return 0;
115
116 if (m >= U && m <= B3)
117 return (m-1)/6 + 1;
118
119 if (m >= Uw && m <= Bw3)
120 return (m-1)/6 - 2;
121
122 if (base_move(m) == E || base_move(m) == y)
123 return 1;
124
125 if (base_move(m) == M || base_move(m) == x)
126 return 2;
127
128 if (base_move(m) == S || base_move(m) == z)
129 return 3;
130
131 return -1;
132}
133
134bool
135commute(Move m1, Move m2)
136{
137 return axis(m1) == axis(m2);
138}
139
140void 110void
141append_alg(AlgList *l, Alg *alg) 111append_alg(AlgList *l, Alg *alg)
142{ 112{
@@ -166,6 +136,30 @@ append_move(Alg *alg, Move m, bool inverse)
166 alg->len++; 136 alg->len++;
167} 137}
168 138
139static int
140axis(Move m)
141{
142 if (m == NULLMOVE)
143 return 0;
144
145 if (m >= U && m <= B3)
146 return (m-1)/6 + 1;
147
148 if (m >= Uw && m <= Bw3)
149 return (m-1)/6 - 2;
150
151 if (base_move(m) == E || base_move(m) == y)
152 return 1;
153
154 if (base_move(m) == M || base_move(m) == x)
155 return 2;
156
157 if (base_move(m) == S || base_move(m) == z)
158 return 3;
159
160 return -1;
161}
162
169Move 163Move
170base_move(Move m) 164base_move(Move m)
171{ 165{
@@ -175,6 +169,12 @@ base_move(Move m)
175 return m - (m-1)%3; 169 return m - (m-1)%3;
176} 170}
177 171
172bool
173commute(Move m1, Move m2)
174{
175 return axis(m1) == axis(m2);
176}
177
178void 178void
179compose_alg(Alg *alg1, Alg *alg2) 179compose_alg(Alg *alg1, Alg *alg2)
180{ 180{
@@ -185,6 +185,13 @@ compose_alg(Alg *alg1, Alg *alg2)
185} 185}
186 186
187void 187void
188copy_alg(Alg *src, Alg *dst)
189{
190 dst->len = 0; /* Overwrites */
191 compose_alg(dst, src);
192}
193
194void
188free_alg(Alg *alg) 195free_alg(Alg *alg)
189{ 196{
190 free(alg->move); 197 free(alg->move);

Generated with cgit - Back to sebastiano.tronto.net