From 0550a16c1cce868bbc3f3b5ad59f80e35cf2a6cd Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Wed, 19 Mar 2025 17:16:41 +0100 Subject: Filter solutions for coordinate solver and fix ordering --- src/solvers/coord/eo.h | 1 + src/solvers/coord/solve.h | 8 +++++--- src/solvers/coord/types_macros.h | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) (limited to 'src/solvers') diff --git a/src/solvers/coord/eo.h b/src/solvers/coord/eo.h index 449397f..46a6f70 100644 --- a/src/solvers/coord/eo.h +++ b/src/solvers/coord/eo.h @@ -15,6 +15,7 @@ STATIC coord_t coordinate_eo = { [AXIS_RL] = TRANS_URr, [AXIS_FB] = TRANS_UFr, }, + .is_admissible = &are_lastmoves_singlecw, }; STATIC uint64_t diff --git a/src/solvers/coord/solve.h b/src/solvers/coord/solve.h index 73ae9b1..6903d1e 100644 --- a/src/solvers/coord/solve.h +++ b/src/solvers/coord/solve.h @@ -35,15 +35,17 @@ solve_coord_appendsolution(dfsarg_solve_coord_t *arg) char *m; if (*arg->nsols >= arg->maxsolutions || - arg->nmoves > *arg->shortest_sol + arg->optimal) + arg->nmoves > *arg->shortest_sol + arg->optimal || + (arg->coord->is_admissible != NULL && + !arg->coord->is_admissible(arg->nmoves, arg->moves))) return 0; - sortparallel(arg->moves, arg->nmoves); - t = inverse_trans(arg->trans); for (i = 0; i < arg->nmoves; i++) tmoves[i] = transform_move(arg->moves[i], t); + sortparallel(tmoves, arg->nmoves); + l = arg->solutions_size - *arg->solutions_used; m = *arg->solutions + *arg->solutions_used; strl = writemoves(tmoves, arg->nmoves, l, m); diff --git a/src/solvers/coord/types_macros.h b/src/solvers/coord/types_macros.h index 84085ad..2309efc 100644 --- a/src/solvers/coord/types_macros.h +++ b/src/solvers/coord/types_macros.h @@ -11,4 +11,5 @@ typedef struct { uint32_t moves_mask; uint64_t trans_mask; uint8_t axistrans[3]; + bool (*is_admissible)(int n, uint8_t [n]); } coord_t; -- cgit v1.3