From ad8c0dc9c4a13d781e9346acbaaa46ddabbd4255 Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Sat, 26 Nov 2022 14:29:44 +0000 Subject: [PATCH] Clear pvals when setting cell This removes the need to check if a cell is determined in solve() --- solve.c | 18 ++++++------------ sud.c | 1 + 2 files changed, 7 insertions(+), 12 deletions(-) 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;