-
Notifications
You must be signed in to change notification settings - Fork 0
/
02162024.ts
84 lines (68 loc) · 2.78 KB
/
02162024.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Write a function that returns whether or not a Sudoku board is valid.
function isValidSudoku(board: string[][]): boolean {
let rows = new Map<number, string[]>();
let cols = new Map<number, string[]>();
let subBoxes = new Map<string, string[]>();
for (let r = 0; r < 9; r++) {
for (let c = 0; c < 9; c++) {
const cell = board[r][c];
if (cell === ".") {
continue;
}
const index = `${Math.floor(r / 3)}, ${Math.floor(c / 3)}`;
if (rows.get(r)?.includes(cell)) {
return false;
} else if (cols.get(c)?.includes(cell)) {
return false;
} else if (subBoxes.get(index)?.includes(cell)) {
return false;
}
rows.set(r, (rows.get(r) || []).concat(cell));
cols.set(c, (cols.get(c) || []).concat(cell));
subBoxes.set(index, (subBoxes.get(index) || []).concat(cell));
}
}
return true;
}
let board = [
["5", "3", ".", ".", "7", ".", ".", ".", "."],
["6", ".", ".", "1", "9", "5", ".", ".", "."],
[".", "9", "8", ".", ".", ".", ".", "6", "."],
["8", ".", ".", ".", "6", ".", ".", ".", "3"],
["4", ".", ".", "8", ".", "3", ".", ".", "1"],
["7", ".", ".", ".", "2", ".", ".", ".", "6"],
[".", "6", ".", ".", ".", ".", "2", "8", "."],
[".", ".", ".", "4", "1", "9", ".", ".", "5"],
[".", ".", ".", ".", "8", ".", ".", "7", "9"],
];
// console.log(isValidSudoku(board), true);
board = [
["8", "3", ".", ".", "7", ".", ".", ".", "."],
["6", ".", ".", "1", "9", "5", ".", ".", "."],
[".", "9", "8", ".", ".", ".", ".", "6", "."],
["8", ".", ".", ".", "6", ".", ".", ".", "3"],
["4", ".", ".", "8", ".", "3", ".", ".", "1"],
["7", ".", ".", ".", "2", ".", ".", ".", "6"],
[".", "6", ".", ".", ".", ".", "2", "8", "."],
[".", ".", ".", "4", "1", "9", ".", ".", "5"],
[".", ".", ".", ".", "8", ".", ".", "7", "9"],
];
// console.log(isValidSudoku(board), false);
board = [
["5", "3", ".", ".", "7", ".", ".", ".", "."],
["6", ".", ".", "1", "9", "5", ".", ".", "."],
[".", "9", "8", ".", ".", ".", ".", "6", "."],
["8", ".", ".", ".", "6", ".", ".", ".", "3"],
["4", ".", ".", "8", ".", "3", ".", ".", "1"],
["7", ".", ".", ".", "2", ".", ".", ".", "6"],
[".", "6", ".", ".", ".", ".", "2", "8", "."],
[".", ".", ".", "4", "1", "9", ".", ".", "5"],
[".", ".", ".", ".", "8", ".", ".", "7", "9"],
];
console.log(isValidSudoku(board));
// board: string[][]. board.length === 9. board[i].length === 9. 1 <= board[i] <= 9, or '.' if empty. Always valid.
// Return true or false to indicate whether the board is valid.
// Create hashmaps for rows, columns and each cell.
// Iterate through each cell of the puzzle, assign the value to the given row, column, and subBox (using an index between 0,0 and 2,2).
// If value repeats, return false.
// https://www.youtube.com/watch?v=TjFXEUCMqI8