From e974dc917159cd9ecc66f57c443772cf15631d32 Mon Sep 17 00:00:00 2001 From: Quinn Date: Wed, 30 Jul 2025 14:46:12 +0200 Subject: [PATCH] revert merge of `sudoku_init` and `sudoku_solve_step`; this was incorrect and causes problems --- src/main.c | 2 ++ src/sudoku.c | 8 ++++++-- src/sudoku.h | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index ec2f7df..ecc45a0 100644 --- a/src/main.c +++ b/src/main.c @@ -20,6 +20,8 @@ int main(int argc, char **argv) { 0x000, 0x000, 0x000, 0x000, 0x080, 0x000, 0x000, 0x040, 0x100, // clang-format on }; + sudoku_init(board); + sudoku_print(board); for (int i = 0; i < 2; i++) { sudoku_solve_step(board); diff --git a/src/sudoku.c b/src/sudoku.c index f64d6a1..31ed25e 100644 --- a/src/sudoku.c +++ b/src/sudoku.c @@ -8,6 +8,12 @@ #include "util/intdef.h" +void sudoku_init(u16 *board) { + for (uint i = 0; i < SUDOKU_LEN; i++) { + board[i] |= SUDOKU_ALL & -!board[i]; + } +} + /* removes `val` from `*brd`, if `*brd` is not equal to `val` */ static inline void setbrdpos(u16 *brd, u16 val) { *brd &= ~(val & -(*brd != val)); @@ -29,8 +35,6 @@ void sudoku_place(u16 *brd, u16 val, uint idx) { void sudoku_solve_step(u16 *board) { for (uint i = 0; i < SUDOKU_LEN; i++) { - board[i] |= SUDOKU_ALL & -!board[i]; - switch (board[i]) { case SUDOKU_1: case SUDOKU_2: diff --git a/src/sudoku.h b/src/sudoku.h index d49e62f..e33f172 100644 --- a/src/sudoku.h +++ b/src/sudoku.h @@ -22,6 +22,9 @@ enum sudoku_bitmask { SUDOKU_ALL = 0x01FF, }; +/* initialises the sudoku board to `SUDOKU_ALL`. (if the tile is empty) */ +void sudoku_init(u16 *board); + /* places `val` at `idx` in `board`, and removes `val` from the possibilities in neighbouring tiles */ void sudoku_place(u16 *board, u16 val, uint idx);