Clear pvals when setting cell
This removes the need to check if a cell is determined in solve()
This commit is contained in:
parent
40c12c3458
commit
ad8c0dc9c4
12
solve.c
12
solve.c
@ -67,10 +67,8 @@ int solve(struct sudoku *sud)
|
|||||||
* cell in its row.
|
* cell in its row.
|
||||||
*/
|
*/
|
||||||
valmask = 0;
|
valmask = 0;
|
||||||
for (j = 0; j < NGROUP; ++j) {
|
for (j = 0; j < NGROUP; ++j)
|
||||||
if (!DET(sud->cells[rowidx_lut[i][j]]))
|
|
||||||
valmask |= sud->cells[rowidx_lut[i][j]];
|
valmask |= sud->cells[rowidx_lut[i][j]];
|
||||||
}
|
|
||||||
if ((pvals = sud->cells[i] & ~valmask)) {
|
if ((pvals = sud->cells[i] & ~valmask)) {
|
||||||
setpval(sud, i, pvals);
|
setpval(sud, i, pvals);
|
||||||
match = true;
|
match = true;
|
||||||
@ -82,10 +80,8 @@ int solve(struct sudoku *sud)
|
|||||||
* cell in its column.
|
* cell in its column.
|
||||||
*/
|
*/
|
||||||
valmask = 0;
|
valmask = 0;
|
||||||
for (j = 0; j < NGROUP; ++j) {
|
for (j = 0; j < NGROUP; ++j)
|
||||||
if (!DET(sud->cells[colidx_lut[i][j]]))
|
|
||||||
valmask |= sud->cells[colidx_lut[i][j]];
|
valmask |= sud->cells[colidx_lut[i][j]];
|
||||||
}
|
|
||||||
if ((pvals = sud->cells[i] & ~valmask)) {
|
if ((pvals = sud->cells[i] & ~valmask)) {
|
||||||
setpval(sud, i, pvals);
|
setpval(sud, i, pvals);
|
||||||
match = true;
|
match = true;
|
||||||
@ -97,10 +93,8 @@ int solve(struct sudoku *sud)
|
|||||||
* cell in its segment.
|
* cell in its segment.
|
||||||
*/
|
*/
|
||||||
valmask = 0;
|
valmask = 0;
|
||||||
for (j = 0; j < NGROUP; ++j) {
|
for (j = 0; j < NGROUP; ++j)
|
||||||
if (!DET(sud->cells[segidx_lut[i][j]]))
|
|
||||||
valmask |= sud->cells[segidx_lut[i][j]];
|
valmask |= sud->cells[segidx_lut[i][j]];
|
||||||
}
|
|
||||||
if ((pvals = sud->cells[i] & ~valmask)) {
|
if ((pvals = sud->cells[i] & ~valmask)) {
|
||||||
setpval(sud, i, pvals);
|
setpval(sud, i, pvals);
|
||||||
match = true;
|
match = true;
|
||||||
|
1
sud.c
1
sud.c
@ -70,6 +70,7 @@ enum update_res update(struct sudoku *sud, unsigned i, unsigned val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Set the cell's value. */
|
/* Set the cell's value. */
|
||||||
|
sud->cells[i] = 0;
|
||||||
sud->cells[i] |= DETMASK;
|
sud->cells[i] |= DETMASK;
|
||||||
sud->cells[i] |= val << VALSHIFT;
|
sud->cells[i] |= val << VALSHIFT;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user