From 44ff6231441024d16fddc2b7cb648539522b04cb Mon Sep 17 00:00:00 2001 From: Maksymilian Jopek Date: Mon, 19 Dec 2022 21:04:23 +0100 Subject: v1.0.0 Added everything that's in the spec --- src/lib/Sudoku.ts | 80 +++++++++++++++++++------------------------------------ 1 file changed, 28 insertions(+), 52 deletions(-) (limited to 'src/lib/Sudoku.ts') 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>; -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>; +export type NGrid = Array>; +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()) +// ) +// } -- cgit v1.3.1