diff --git a/solve.c b/solve.c index b5cf04d..c1fc7f0 100644 --- a/solve.c +++ b/solve.c @@ -67,10 +67,8 @@ int solve(struct sudoku *sud) * cell in its row. */ valmask = 0; - for (j = 0; j < NGROUP; ++j) { - if (!DET(sud->cells[rowidx_lut[i][j]])) - valmask |= sud->cells[rowidx_lut[i][j]]; - } + for (j = 0; j < NGROUP; ++j) + valmask |= sud->cells[rowidx_lut[i][j]]; if ((pvals = sud->cells[i] & ~valmask)) { setpval(sud, i, pvals); match = true; @@ -82,10 +80,8 @@ int solve(struct sudoku *sud) * cell in its column. */ valmask = 0; - for (j = 0; j < NGROUP; ++j) { - if (!DET(sud->cells[colidx_lut[i][j]])) - valmask |= sud->cells[colidx_lut[i][j]]; - } + for (j = 0; j < NGROUP; ++j) + valmask |= sud->cells[colidx_lut[i][j]]; if ((pvals = sud->cells[i] & ~valmask)) { setpval(sud, i, pvals); match = true; @@ -97,10 +93,8 @@ int solve(struct sudoku *sud) * cell in its segment. */ valmask = 0; - for (j = 0; j < NGROUP; ++j) { - if (!DET(sud->cells[segidx_lut[i][j]])) - valmask |= sud->cells[segidx_lut[i][j]]; - } + for (j = 0; j < NGROUP; ++j) + valmask |= sud->cells[segidx_lut[i][j]]; if ((pvals = sud->cells[i] & ~valmask)) { setpval(sud, i, pvals); match = true; diff --git a/sud.c b/sud.c index 51c8a21..70d41bf 100644 --- a/sud.c +++ b/sud.c @@ -70,6 +70,7 @@ enum update_res update(struct sudoku *sud, unsigned i, unsigned val) } /* Set the cell's value. */ + sud->cells[i] = 0; sud->cells[i] |= DETMASK; sud->cells[i] |= val << VALSHIFT;