diff options
Diffstat (limited to '')
| -rw-r--r-- | src/alg.c | 67 |
1 files changed, 37 insertions, 30 deletions
| @@ -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 | ||
| 110 | static int | ||
| 111 | axis(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 | |||
| 134 | bool | ||
| 135 | commute(Move m1, Move m2) | ||
| 136 | { | ||
| 137 | return axis(m1) == axis(m2); | ||
| 138 | } | ||
| 139 | |||
| 140 | void | 110 | void |
| 141 | append_alg(AlgList *l, Alg *alg) | 111 | append_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 | ||
| 139 | static int | ||
| 140 | axis(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 | |||
| 169 | Move | 163 | Move |
| 170 | base_move(Move m) | 164 | base_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 | ||
| 172 | bool | ||
| 173 | commute(Move m1, Move m2) | ||
| 174 | { | ||
| 175 | return axis(m1) == axis(m2); | ||
| 176 | } | ||
| 177 | |||
| 178 | void | 178 | void |
| 179 | compose_alg(Alg *alg1, Alg *alg2) | 179 | compose_alg(Alg *alg1, Alg *alg2) |
| 180 | { | 180 | { |
| @@ -185,6 +185,13 @@ compose_alg(Alg *alg1, Alg *alg2) | |||
| 185 | } | 185 | } |
| 186 | 186 | ||
| 187 | void | 187 | void |
| 188 | copy_alg(Alg *src, Alg *dst) | ||
| 189 | { | ||
| 190 | dst->len = 0; /* Overwrites */ | ||
| 191 | compose_alg(dst, src); | ||
| 192 | } | ||
| 193 | |||
| 194 | void | ||
| 188 | free_alg(Alg *alg) | 195 | free_alg(Alg *alg) |
| 189 | { | 196 | { |
| 190 | free(alg->move); | 197 | free(alg->move); |
