aboutsummaryrefslogtreecommitdiff
path: root/unequal.c
diff options
context:
space:
mode:
Diffstat (limited to 'unequal.c')
-rw-r--r--unequal.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/unequal.c b/unequal.c
index ed03c0b..f2328b6 100644
--- a/unequal.c
+++ b/unequal.c
@@ -890,13 +890,14 @@ static int solver_state(game_state *state, int maxdiff)
struct latin_solver solver;
int diff;
- latin_solver_alloc(&solver, state->nums, state->order);
-
- diff = latin_solver_main(&solver, maxdiff,
- DIFF_LATIN, DIFF_SET, DIFF_EXTREME,
- DIFF_EXTREME, DIFF_RECURSIVE,
- unequal_solvers, unequal_valid, ctx,
- clone_ctx, free_ctx);
+ if (!latin_solver_alloc(&solver, state->nums, state->order))
+ diff = latin_solver_main(&solver, maxdiff,
+ DIFF_LATIN, DIFF_SET, DIFF_EXTREME,
+ DIFF_EXTREME, DIFF_RECURSIVE,
+ unequal_solvers, unequal_valid, ctx,
+ clone_ctx, free_ctx);
+ else
+ diff = DIFF_IMPOSSIBLE;
memcpy(state->hints, solver.cube, state->order*state->order*state->order);
@@ -2256,13 +2257,14 @@ static int solve(game_params *p, char *desc, int debug)
solver_show_working = debug;
game_debug(state);
- latin_solver_alloc(&solver, state->nums, state->order);
-
- diff = latin_solver_main(&solver, DIFF_RECURSIVE,
- DIFF_LATIN, DIFF_SET, DIFF_EXTREME,
- DIFF_EXTREME, DIFF_RECURSIVE,
- unequal_solvers, unequal_valid, ctx,
- clone_ctx, free_ctx);
+ if (latin_solver_alloc(&solver, state->nums, state->order))
+ diff = latin_solver_main(&solver, DIFF_RECURSIVE,
+ DIFF_LATIN, DIFF_SET, DIFF_EXTREME,
+ DIFF_EXTREME, DIFF_RECURSIVE,
+ unequal_solvers, unequal_valid, ctx,
+ clone_ctx, free_ctx);
+ else
+ diff = DIFF_IMPOSSIBLE;
free_ctx(ctx);