diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/alg.c | 40 | ||||
| -rw-r--r-- | src/alg.h | 3 | ||||
| -rw-r--r-- | src/commands.c | 8 |
3 files changed, 28 insertions, 23 deletions
| @@ -474,32 +474,36 @@ unniss(Alg *alg) | |||
| 474 | } | 474 | } |
| 475 | 475 | ||
| 476 | void | 476 | void |
| 477 | init_movesets() | 477 | init_moveset(Moveset *ms) |
| 478 | { | 478 | { |
| 479 | int i, j; | 479 | int j; |
| 480 | uint64_t l, one; | 480 | uint64_t l, one; |
| 481 | Move m, l2, l1; | 481 | Move m, l2, l1; |
| 482 | Moveset *ms; | ||
| 483 | 482 | ||
| 484 | one = 1; | 483 | one = 1; |
| 485 | 484 | ||
| 486 | for (i = 0; i < nmoveset; i++) { | 485 | for (j = 0, m = U; m < NMOVES; m++) |
| 487 | ms = all_ms[i]; | 486 | if (ms->allowed(m)) |
| 487 | ms->sorted_moves[j++] = m; | ||
| 488 | ms->sorted_moves[j] = NULLMOVE; | ||
| 488 | 489 | ||
| 489 | for (j = 0, m = U; m < NMOVES; m++) | 490 | for (l1 = 0; l1 < NMOVES; l1++) { |
| 490 | if (ms->allowed(m)) | 491 | for (l2 = 0; l2 < NMOVES; l2++) { |
| 491 | ms->sorted_moves[j++] = m; | 492 | ms->mask[l2][l1] = 0; |
| 492 | ms->sorted_moves[j] = NULLMOVE; | 493 | for (l=0; ms->sorted_moves[l]!=NULLMOVE; l++) { |
| 493 | 494 | m = ms->sorted_moves[l]; | |
| 494 | for (l1 = 0; l1 < NMOVES; l1++) { | 495 | if (ms->allowed_next(l2, l1, m)) |
| 495 | for (l2 = 0; l2 < NMOVES; l2++) { | 496 | ms->mask[l2][l1] |= (one<<m); |
| 496 | ms->mask[l2][l1] = 0; | ||
| 497 | for (l=0; ms->sorted_moves[l]!=NULLMOVE; l++) { | ||
| 498 | m = ms->sorted_moves[l]; | ||
| 499 | if (ms->allowed_next(l2, l1, m)) | ||
| 500 | ms->mask[l2][l1] |= (one<<m); | ||
| 501 | } | ||
| 502 | } | 497 | } |
| 503 | } | 498 | } |
| 504 | } | 499 | } |
| 505 | } | 500 | } |
| 501 | |||
| 502 | void | ||
| 503 | init_all_movesets() | ||
| 504 | { | ||
| 505 | int i; | ||
| 506 | |||
| 507 | for (i = 0; i < nmoveset; i++) | ||
| 508 | init_moveset(all_ms[i]); | ||
| 509 | } | ||
| @@ -35,7 +35,8 @@ void print_alglist(AlgList *al, bool l); | |||
| 35 | void swapmove(Move *m1, Move *m2); | 35 | void swapmove(Move *m1, Move *m2); |
| 36 | void unniss(Alg *alg); | 36 | void unniss(Alg *alg); |
| 37 | 37 | ||
| 38 | void init_movesets(); | 38 | void init_moveset(Moveset *ms); |
| 39 | void init_all_movesets(); | ||
| 39 | 40 | ||
| 40 | #endif | 41 | #endif |
| 41 | 42 | ||
diff --git a/src/commands.c b/src/commands.c index 9ecc9c7..740736c 100644 --- a/src/commands.c +++ b/src/commands.c | |||
| @@ -367,7 +367,7 @@ solve_exec(CommandArgs *args) | |||
| 367 | Cube c; | 367 | Cube c; |
| 368 | AlgList *sols; | 368 | AlgList *sols; |
| 369 | 369 | ||
| 370 | init_movesets(); | 370 | init_all_movesets(); |
| 371 | init_symcoord(); | 371 | init_symcoord(); |
| 372 | 372 | ||
| 373 | c = apply_alg(args->scramble, (Cube){0}); | 373 | c = apply_alg(args->scramble, (Cube){0}); |
| @@ -388,7 +388,7 @@ scramble_exec(CommandArgs *args) | |||
| 388 | Alg *scr; | 388 | Alg *scr; |
| 389 | int i; | 389 | int i; |
| 390 | 390 | ||
| 391 | init_movesets(); | 391 | init_all_movesets(); |
| 392 | init_symcoord(); | 392 | init_symcoord(); |
| 393 | 393 | ||
| 394 | srand(time(NULL)); | 394 | srand(time(NULL)); |
| @@ -407,7 +407,7 @@ gen_exec(CommandArgs *args) | |||
| 407 | int i; | 407 | int i; |
| 408 | 408 | ||
| 409 | fprintf(stderr, "Generating coordinates...\n"); | 409 | fprintf(stderr, "Generating coordinates...\n"); |
| 410 | init_movesets(); | 410 | init_all_movesets(); |
| 411 | init_symcoord(); | 411 | init_symcoord(); |
| 412 | 412 | ||
| 413 | fprintf(stderr, "Generating pruning tables...\n"); | 413 | fprintf(stderr, "Generating pruning tables...\n"); |
| @@ -460,7 +460,7 @@ twophase_exec(CommandArgs *args) | |||
| 460 | Cube c; | 460 | Cube c; |
| 461 | Alg *sol; | 461 | Alg *sol; |
| 462 | 462 | ||
| 463 | init_movesets(); | 463 | init_all_movesets(); |
| 464 | init_symcoord(); | 464 | init_symcoord(); |
| 465 | 465 | ||
| 466 | c = apply_alg(args->scramble, (Cube){0}); | 466 | c = apply_alg(args->scramble, (Cube){0}); |
