Only apply rules to rows

It goes faster this way.
This commit is contained in:
Camden Dixie O'Brien 2022-11-23 15:50:20 +00:00
parent 119270c89b
commit 5aea129dc9

35
solve.c
View File

@ -83,7 +83,7 @@ static enum apply_res apply_rules(struct sudoku *sud, cellgroup *group)
int solve(struct sudoku *sud) int solve(struct sudoku *sud)
{ {
cellgroup group = { 0 }; cellgroup group = { 0 };
unsigned r, c, i, j, n; unsigned r, c, n;
bool match; bool match;
enum apply_res res; enum apply_res res;
@ -105,39 +105,6 @@ int solve(struct sudoku *sud)
match = true; match = true;
} }
/* Apply rules to each column. */
for (c = 0; c < NDIGITS; ++c) {
for (r = 0; r < NDIGITS; ++r) {
group[r].row = r;
group[r].col = c;
group[r].state = &sud->cells[r][c];
}
res = apply_rules(sud, &group);
if (res == ERROR)
return -1;
else if (res == MATCH)
match = true;
}
/* Apply rules to each segment. */
for (i = 0; i < NDIGITS; ++i) {
for (j = 0; j < NDIGITS; ++j) {
r = 3 * (i / 3) + j / 3;
c = 3 * (i % 3) + j % 3;
group[j].row = r;
group[j].col = c;
group[j].state = &sud->cells[r][c];
}
res = apply_rules(sud, &group);
if (res == ERROR)
return -1;
else if (res == MATCH)
match = true;
}
/* Exit if no matches. */ /* Exit if no matches. */
if (!match) if (!match)
return n; return n;