Compare commits
3 Commits
088135ac32
...
f797701718
| Author | SHA1 | Date | |
|---|---|---|---|
| f797701718 | |||
| e974dc9171 | |||
| 21c10de9da |
22
src/main.c
22
src/main.c
@@ -12,25 +12,21 @@ int main(int argc, char **argv) {
|
||||
0x010, 0x004, 0x000, 0x000, 0x040, 0x000, 0x000, 0x000, 0x000,
|
||||
0x020, 0x000, 0x000, 0x001, 0x100, 0x010, 0x000, 0x000, 0x000,
|
||||
0x000, 0x100, 0x080, 0x000, 0x000, 0x000, 0x000, 0x020, 0x000,
|
||||
0x080, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004,
|
||||
0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
|
||||
0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020,
|
||||
0x080, 0x000, 0x000, 0x000, 0x020, 0x000, 0x000, 0x000, 0x004,
|
||||
0x008, 0x000, 0x000, 0x080, 0x000, 0x004, 0x000, 0x000, 0x001,
|
||||
0x040, 0x000, 0x000, 0x000, 0x002, 0x000, 0x000, 0x000, 0x020,
|
||||
0x000, 0x020, 0x000, 0x000, 0x000, 0x000, 0x002, 0x080, 0x000,
|
||||
0x000, 0x000, 0x000, 0x008, 0x001, 0x100, 0x000, 0x000, 0x010,
|
||||
0x000, 0x000, 0x000, 0x000, 0x080, 0x000, 0x000, 0x040, 0x100,
|
||||
// clang-format on
|
||||
};
|
||||
sudoku_init(board);
|
||||
sudoku_print(board);
|
||||
sudoku_solve_step(board);
|
||||
sudoku_print(board);
|
||||
sudoku_solve_step(board);
|
||||
sudoku_print(board);
|
||||
sudoku_solve_step(board);
|
||||
sudoku_print(board);
|
||||
sudoku_solve_step(board);
|
||||
sudoku_print(board);
|
||||
sudoku_solve_step(board);
|
||||
sudoku_print(board);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
sudoku_solve_step(board);
|
||||
sudoku_print(board);
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
13
src/sudoku.c
13
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:
|
||||
@@ -42,6 +46,7 @@ void sudoku_solve_step(u16 *board) {
|
||||
case SUDOKU_8:
|
||||
case SUDOKU_9:
|
||||
sudoku_place(board, board[i], i);
|
||||
// printf("%i,%i\n", i % SUDOKU_DPT, i / SUDOKU_DPT);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,7 +56,7 @@ void sudoku_print(const u16 *board) {
|
||||
for (uint i = 0; i < SUDOKU_LEN; i++) {
|
||||
char tile;
|
||||
switch (board[i]) {
|
||||
case 0: tile = 'x'; break;
|
||||
// case 0: tile = 'x'; break;
|
||||
case SUDOKU_1: tile = '1'; break;
|
||||
case SUDOKU_2: tile = '2'; break;
|
||||
case SUDOKU_3: tile = '3'; break;
|
||||
@@ -65,7 +70,7 @@ void sudoku_print(const u16 *board) {
|
||||
};
|
||||
|
||||
printf("| %c ", tile);
|
||||
// printf("|%3i", board[i]);
|
||||
// printf("|%3X", board[i]);
|
||||
if (i % 9 == 8) printf("|\n");
|
||||
}
|
||||
printf("+———-———-———-———-———-———-———-———-———+\n");
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user