From 69daa07b63d8e4e13a3da6294278076009246d9f Mon Sep 17 00:00:00 2001 From: Quinn Date: Tue, 29 Jul 2025 11:48:04 +0200 Subject: [PATCH] writie function for placing sudoku tiles --- src/sudoku.c | 11 +++++++++++ src/sudoku.h | 3 +++ 2 files changed, 14 insertions(+) diff --git a/src/sudoku.c b/src/sudoku.c index 4b0ebb1..e01be89 100644 --- a/src/sudoku.c +++ b/src/sudoku.c @@ -14,6 +14,17 @@ void sudoku_init(u16 *board) { } } +void sudoku_place(u16 *board, u16 val, uint idx) { + uint icol = idx % SUDOKU_DEPTH; + uint irow = idx - icol; + uint ibox = idx - (idx % SUDOKU_DEPTH_SQRT); + for (uint i = 0; i < SUDOKU_DEPTH; i++) { + board[irow + i] &= ~val; + board[icol + (i * SUDOKU_DEPTH)] &= ~val; + board[ibox + (i / SUDOKU_DEPTH_SQRT * SUDOKU_DEPTH) + (i % SUDOKU_DEPTH_SQRT)] &= ~val; + } +} + void sudoku_solve_step(u16 *board) { u16 bmask[SUDOKU_DEPTH_2]; // board mask memcpy(bmask, board, SUDOKU_DEPTH_2 * 2); diff --git a/src/sudoku.h b/src/sudoku.h index f42a165..01b0791 100644 --- a/src/sudoku.h +++ b/src/sudoku.h @@ -25,6 +25,9 @@ enum sudoku_bitmask { /* 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); + /* TODO: write documentation */ void sudoku_solve_step(u16 *board);