merge sudoku_init with sudoku_solve_step
This commit is contained in:
@@ -20,7 +20,6 @@ int main(int argc, char **argv) {
|
|||||||
0x000, 0x000, 0x000, 0x000, 0x080, 0x000, 0x000, 0x040, 0x100,
|
0x000, 0x000, 0x000, 0x000, 0x080, 0x000, 0x000, 0x040, 0x100,
|
||||||
// clang-format on
|
// clang-format on
|
||||||
};
|
};
|
||||||
sudoku_init(board);
|
|
||||||
sudoku_print(board);
|
sudoku_print(board);
|
||||||
sudoku_solve_step(board);
|
sudoku_solve_step(board);
|
||||||
sudoku_print(board);
|
sudoku_print(board);
|
||||||
|
|||||||
@@ -8,12 +8,6 @@
|
|||||||
|
|
||||||
#include "util/intdef.h"
|
#include "util/intdef.h"
|
||||||
|
|
||||||
void sudoku_init(u16 *board) {
|
|
||||||
for (uint i = 0; i < SUDOKU_DEPTH_2; i++) {
|
|
||||||
board[i] |= SUDOKU_ALL & -!board[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* removes `val` from `*brd`, if `*brd` is not equal to `val` */
|
/* removes `val` from `*brd`, if `*brd` is not equal to `val` */
|
||||||
static inline void setbrdpos(u16 *brd, u16 val) {
|
static inline void setbrdpos(u16 *brd, u16 val) {
|
||||||
*brd &= ~(val & -(*brd != val));
|
*brd &= ~(val & -(*brd != val));
|
||||||
@@ -32,6 +26,8 @@ void sudoku_place(u16 *brd, u16 val, uint idx) {
|
|||||||
|
|
||||||
void sudoku_solve_step(u16 *board) {
|
void sudoku_solve_step(u16 *board) {
|
||||||
for (uint i = 0; i < SUDOKU_DEPTH_2; i++) {
|
for (uint i = 0; i < SUDOKU_DEPTH_2; i++) {
|
||||||
|
board[i] |= SUDOKU_ALL & -!board[i];
|
||||||
|
|
||||||
switch (board[i]) {
|
switch (board[i]) {
|
||||||
case SUDOKU_1:
|
case SUDOKU_1:
|
||||||
case SUDOKU_2:
|
case SUDOKU_2:
|
||||||
|
|||||||
@@ -22,9 +22,6 @@ enum sudoku_bitmask {
|
|||||||
SUDOKU_ALL = 0x01FF,
|
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 */
|
/* places `val` at `idx` in `board`, and removes `val` from the possibilities in neighbouring tiles */
|
||||||
void sudoku_place(u16 *board, u16 val, uint idx);
|
void sudoku_place(u16 *board, u16 val, uint idx);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user