diff options
Diffstat (limited to 'src/alg.c')
| -rw-r--r-- | src/alg.c | 32 |
1 files changed, 32 insertions, 0 deletions
| @@ -373,3 +373,35 @@ realloc_alg(Alg *alg, int n) | |||
| 373 | alg->allocated = n; | 373 | alg->allocated = n; |
| 374 | } | 374 | } |
| 375 | 375 | ||
| 376 | void | ||
| 377 | swapmove(Move *m1, Move *m2) | ||
| 378 | { | ||
| 379 | Move aux; | ||
| 380 | |||
| 381 | aux = *m1; | ||
| 382 | *m1 = *m2; | ||
| 383 | *m2 = aux; | ||
| 384 | } | ||
| 385 | |||
| 386 | void | ||
| 387 | unniss(Alg *alg) | ||
| 388 | { | ||
| 389 | int i; | ||
| 390 | Alg *aux; | ||
| 391 | |||
| 392 | aux = new_alg(""); | ||
| 393 | |||
| 394 | for (i = 0; i < alg->len; i++) | ||
| 395 | if (!alg->inv[i]) | ||
| 396 | append_move(aux, alg->move[i], false); | ||
| 397 | |||
| 398 | for (i = alg->len-1; i >= 0; i--) | ||
| 399 | if (alg->inv[i]) | ||
| 400 | append_move(aux, inverse_move(alg->move[i]), false); | ||
| 401 | |||
| 402 | for (i = 0; i < alg->len; i++) { | ||
| 403 | alg->move[i] = aux->move[i]; | ||
| 404 | alg->inv[i] = false; | ||
| 405 | } | ||
| 406 | free(aux); | ||
| 407 | } | ||
