diff --git a/meson.build b/meson.build index 1557004..dd667dc 100644 --- a/meson.build +++ b/meson.build @@ -10,6 +10,7 @@ project( sources = [ 'src/main.c', + 'src/sudoku.c', ] executable( diff --git a/src/sudoku.c b/src/sudoku.c new file mode 100644 index 0000000..c84f04a --- /dev/null +++ b/src/sudoku.c @@ -0,0 +1,37 @@ +#include "sudoku.h" + +#include + +#define INPUT_PATTERN "%1d %1d %1d %1d %1d %1d %1d %1d %1d\n" + +bool parse_grid_file(struct sudoku *grid, FILE *input) { + if (!input || !grid) + return false; + + for (size_t i = 0; i < 9; ++i) { + int *line = grid->grid[i]; + + if (fscanf(input, INPUT_PATTERN, &line[0], &line[1], &line[2], &line[3], + &line[4], &line[5], &line[6], &line[7], &line[8]) + < 9) + return false; + } + + return true; +} + +bool parse_grid_str(struct sudoku *grid, const char *input) { + if (!input || !grid) + return false; + + for (size_t i = 0; i < 9; ++i) { + int *line = grid->grid[i]; + + if (sscanf(input, INPUT_PATTERN, &line[0], &line[1], &line[2], &line[3], + &line[4], &line[5], &line[6], &line[7], &line[8]) + < 9) + return false; + } + + return true; +} diff --git a/src/sudoku.h b/src/sudoku.h new file mode 100644 index 0000000..4ecd566 --- /dev/null +++ b/src/sudoku.h @@ -0,0 +1,14 @@ +#ifndef SUDOKU_H +#define SUDOKU_H + +#include +#include + +struct sudoku { + int grid[9][9]; +}; + +bool parse_grid_file(struct sudoku *grid, FILE *input); +bool parse_grid_str(struct sudoku *grid, const char *input); + +#endif /* !SUDOKU_H */