-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
81 lines (71 loc) · 2.02 KB
/
index.js
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
import {validArray} from './validArray.js';
import {invalidArray} from './invalidArray.js';
let isValid = false;
function getUniqueValues(array) {
return [...new Set(array)];
};
function findZeros(array) {
let isNoZero = true;
for (let row = 0; row < array.length; row++) {
for (let col = 0; col < array[row].length; col++) {
if (array[row][col] === 0) {
isNoZero = false;
break;
}
}
if (!isNoZero) break;
}
return isNoZero;
};
function hasUniqueRows(array) {
for (let i = 0; i < array.length; i++) {
let row = array[i];
if (row.length !== getUniqueValues(row).length) {
return false;
}
}
return true;
};
function hasUniqueColumns(array) {
for (let i = 0; i < array.length; i++) {
let column = array.map(row => row[i]);
if (column.length !== getUniqueValues(column).length) {
return false;
}
}
return true;
};
function hasUniqueBlocks(array) {
const blockArray = [];
for (let rowStart = 0; rowStart < array.length; rowStart += array.length / 3) {
for (let colStart = 0; colStart < array.length; colStart += array.length / 3) {
const block = [];
for (let i = 0; i < array.length / 3; i++) {
for (let j = 0; j < array.length / 3; j++) {
block.push(array[rowStart + i][colStart + j]);
}
}
blockArray.push(block);
}
}
return hasUniqueRows(blockArray);
};
function validateSudoku(array) {
if (!findZeros(array)) {
return false;
}
if (!hasUniqueRows(array)) {
return false;
}
if (!hasUniqueColumns(array)) {
return false;
}
if (!hasUniqueBlocks(array)) {
return false;
}
return true;
};
isValid = validateSudoku(validArray);
console.log('Sudoku is valid: '+ isValid);
isValid = validateSudoku(invalidArray);
console.log('Sudoku is valid: '+ isValid);