-static int solver(int c, int r, digit *grid, random_state *rs, int maxdiff)
+static int solver(int c, int r, digit *grid, int maxdiff)
/*
* And step along the list, recursing back into the
* main solver at every stage.
/*
* And step along the list, recursing back into the
* main solver at every stage.
- ret = solver(c, r, outgrid, rs, maxdiff);
+ ret = solver(c, r, outgrid, maxdiff);
- if (usage->rs) {
- /* shuffle */
- for (i = j; i > 1; i--) {
- int p = random_upto(usage->rs, i);
- if (p != i-1) {
- int t = digits[p];
- digits[p] = digits[i-1];
- digits[i-1] = t;
- }
- }
- }
+ if (usage->rs)
+ shuffle(digits, j, sizeof(*digits), usage->rs);
- for (i = nlocs; i > 1; i--) {
- int p = random_upto(rs, i);
- if (p != i-1) {
- struct xy t = locs[p];
- locs[p] = locs[i-1];
- locs[i-1] = t;
- }
- }
+ shuffle(locs, nlocs, sizeof(*locs), rs);
- ret = solver(c, r, grid2, NULL, maxdiff);
+ ret = solver(c, r, grid2, maxdiff);
if (ret != DIFF_IMPOSSIBLE && ret != DIFF_AMBIGUOUS) {
for (j = 0; j < ncoords; j++)
grid[coords[2*j+1]*cr+coords[2*j]] = 0;
if (ret != DIFF_IMPOSSIBLE && ret != DIFF_AMBIGUOUS) {
for (j = 0; j < ncoords; j++)
grid[coords[2*j+1]*cr+coords[2*j]] = 0;
- } while (solver(c, r, grid2, NULL, maxdiff) < maxdiff);
+ } while (solver(c, r, grid2, maxdiff) < maxdiff);
grid = snewn(cr*cr, digit);
memcpy(grid, state->grid, cr*cr);
grid = snewn(cr*cr, digit);
memcpy(grid, state->grid, cr*cr);
- solve_ret = solver(c, r, grid, NULL, DIFF_RECURSIVE);
+ solve_ret = solver(c, r, grid, DIFF_RECURSIVE);
{ assert(!"Shouldn't get randomness"); return 0; }
unsigned long random_upto(random_state *state, unsigned long limit)
{ assert(!"Shouldn't get randomness"); return 0; }
{ assert(!"Shouldn't get randomness"); return 0; }
unsigned long random_upto(random_state *state, unsigned long limit)
{ assert(!"Shouldn't get randomness"); return 0; }
- ret = solver(p->c, p->r, s->grid, NULL, DIFF_RECURSIVE);
+ ret = solver(p->c, p->r, s->grid, DIFF_RECURSIVE);
if (grade) {
printf("Difficulty rating: %s\n",
ret==DIFF_BLOCK ? "Trivial (blockwise positional elimination only)":
if (grade) {
printf("Difficulty rating: %s\n",
ret==DIFF_BLOCK ? "Trivial (blockwise positional elimination only)":