aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/Sudoku.ts
diff options
context:
space:
mode:
authorMaksymilian Jopek <maks@jopek.eu>2022-12-19 21:04:23 +0100
committerMaksymilian Jopek <maks@jopek.eu>2022-12-19 21:04:23 +0100
commit44ff6231441024d16fddc2b7cb648539522b04cb (patch)
tree8302d0734f4ce931631ffe6d43af5b9a5da284a0 /src/lib/Sudoku.ts
parent9f4618c5ef618521ce1ab680d82ed9cc941d10d8 (diff)
downloaddigit-single-44ff6231441024d16fddc2b7cb648539522b04cb.tar.gz
digit-single-44ff6231441024d16fddc2b7cb648539522b04cb.tar.zst
digit-single-44ff6231441024d16fddc2b7cb648539522b04cb.zip
v1.0.0
Added everything that's in the spec
Diffstat (limited to 'src/lib/Sudoku.ts')
-rw-r--r--src/lib/Sudoku.ts80
1 files changed, 28 insertions, 52 deletions
diff --git a/src/lib/Sudoku.ts b/src/lib/Sudoku.ts
index 94b972e..879185a 100644
--- a/src/lib/Sudoku.ts
+++ b/src/lib/Sudoku.ts
@@ -1,57 +1,33 @@
-export type Grid = Array<Array<string>>;
-export type Coord = { x: number; y: number };
-
-export function validate(board: Grid) {
- const bads = [] as Coord[];
- for (let i = 0; i < 9; i++) {
- for (let j = 0; j < 9; j++) {
- const value = board[i][j];
- if (value !== '.') {
- if (!validateRow(board, i, j, value) || !validateColumn(board, i, j, value) || !validateBox(board, i, j, value)) {
- bads.push({ x: i, y: j })
- }
- }
- }
- }
- return bads;
-};
-
-function validateRow(board: Grid, row: number, col: number, value: string) {
- for (let j = 0; j < 8; j++) {
- if (j !== col) {
- if (board[row][j] === value) {
- return false;
- }
- }
- }
-
- return true;
-}
-
-function validateColumn(board: Grid, row: number, col: number, value: string) {
- for (let i = 0; i < 8; i++) {
- if (i !== row) {
- if (board[i][col] === value) {
- return false;
- }
- }
- }
+//@ts-expect-error
+import _sudoku from "sudoku-umd";
+//@ts-expect-error
+import _sudoku2_ from "sudoku-solver-js";
- return true;
-}
+const _sudoku2 = new _sudoku2_();
-function validateBox(board: Grid, row: number, col: number, value: string) {
- const startRow = row - (row % 3), startCol = col - (col % 3);
+const sudoku: {
+ solve(arg0: string): string,
+ board_string_to_grid(arg0: string): string[][],
+ board_grid_to_string(arg0: string[][]): string,
+ get_candidates(arg0: string): string[][],
+ print_board(arg0: string): void,
+} = _sudoku;
- for (let i = startRow; i < startRow + 3; i++) {
- for (let j = startCol; j < startCol + 3; j++) {
- if (i !== row && j !== col) {
- if (board[i][j] === value) {
- return false;
- }
- }
- }
- }
+export type Grid = Array<Array<string>>;
+export type NGrid = Array<Array<number>>;
+export type Coord = { x: number; y: number };
+export * from "./sudoku/validation";
- return true;
+export function solve(grid: Grid) {
+ return sudoku.board_string_to_grid(_sudoku2.solve(sudoku.board_grid_to_string(grid)))
}
+// function grid2NGrid(grid: Grid): NGrid {
+// return grid.map(
+// row => row.map(t => t === "." ? 0 : parseInt(t))
+// )
+// }
+// function ngrid2Grid(ngrid: NGrid): Grid {
+// return ngrid.map(
+// row => row.map(t => t === 0 ? "." : t.toString())
+// )
+// }