From 9f4618c5ef618521ce1ab680d82ed9cc941d10d8 Mon Sep 17 00:00:00 2001 From: Maksymilian Jopek Date: Mon, 12 Dec 2022 23:00:12 +0100 Subject: Added saving and loading Fix same value for each column Add showing errors --- src/lib/Sudoku.ts | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 5 deletions(-) (limited to 'src/lib/Sudoku.ts') diff --git a/src/lib/Sudoku.ts b/src/lib/Sudoku.ts index 0da0d77..94b972e 100644 --- a/src/lib/Sudoku.ts +++ b/src/lib/Sudoku.ts @@ -1,9 +1,57 @@ -import sudoku from "sudoku-umd"; +export type Grid = Array>; +export type Coord = { x: number; y: number }; -type Grid = Array>; +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; +}; -export function validate(grid: Grid) { - const list = sudoku.board_grid_to_string(grid) +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 + 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; + } + } + } + + return true; +} + +function validateBox(board: Grid, row: number, col: number, value: string) { + const startRow = row - (row % 3), startCol = col - (col % 3); + + 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; + } + } + } + } + + return true; } -- cgit v1.3.1