writie function for placing sudoku tiles

This commit is contained in:
2025-07-29 11:48:04 +02:00
parent a5b6c52053
commit 69daa07b63
2 changed files with 14 additions and 0 deletions

View File

@@ -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);

View File

@@ -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);