-
Notifications
You must be signed in to change notification settings - Fork 0
/
SudokuValidator.java
executable file
·139 lines (122 loc) · 3.84 KB
/
SudokuValidator.java
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
public class SudokuValidator {
/**
* Controlla se la cella fosse valida con il valore passato in input
*
* @param row
* @param column
* @param value
* @param SD
* @return se la cella è valida
*/
static boolean isSafe(int row, int column, int value, SudokuGrid SD) {
if(row(row, value, SD) &&
column(column, value, SD) &&
box(row - row % SD.getSRN(), column - column % SD.getSRN(), value, SD))
return true;
return false;
}
/**
* Controlla se il valore passato in input è già all'interno del box
*
* @param rowStart cordinata x della prima cella del box
* @param columnStart cordinata y della prima cella del box
* @param value
* @param SD
* @return se la cella nel box è valida
*/
static boolean box(int rowStart, int columnStart, int value, SudokuGrid SD) {
for(int i = 0; i < SD.getSRN(); i++)
for(int j = 0; j < SD.getSRN(); j++)
if(SD.getCells()[rowStart + i][columnStart + j].getValue() == value)
return false;
return true;
}
/**
* Controlla se il valore passato in input c'è già una volta nella riga
*
* @param row
* @param value
* @param SD
* @return se la cella è valida
*/
static private boolean row(int row, int value, SudokuGrid SD){
for(int i = 0; i < SD.getN(); i++)
if(SD.getCells()[row][i].getValue() == value)
return false;
return true;
}
/**
* Controlla se il valore passato in input c'è già una volta nella colonna
*
* @param column
* @param value
* @param SD
* @return se la cella è valida
*/
static private boolean column(int column, int value, SudokuGrid SD){
for(int i = 0; i < SD.getN(); i++)
if(SD.getCells()[i][column].getValue() == value)
return false;
return true;
}
/**
* Controlla se la cella è valida
*
* @param row
* @param column
* @param value
* @param SD
* @return
*/
static boolean isSafe2(int row, int column, int value, SudokuGrid SD){
if(row2(row, value, SD) &&
column2(column, value, SD) &&
box2(row - row % SD.getSRN(), column - column % SD.getSRN(), value, SD))
return true;
return false;
}
/**
* Controlla se il valore della cella c'è una sola volta nel box
*
* @param rowStart cordinata x della prima cella del box
* @param columnStart cordinata y della prima cella del box
* @param value
* @param SD
* @return
*/
static private boolean box2(int rowStart, int columnStart, int value, SudokuGrid SD) {
int cnt = 0;
for(int i = 0; i < SD.getSRN(); i++)
for(int j = 0; j < SD.getSRN(); j++)
if(SD.getCells()[rowStart + i][columnStart + j].getValue() == value) cnt++;
return cnt == 1;
}
/**
* Controlla se il valore della cella c'è pì di una volta nella colonna
*
* @param column
* @param value
* @param SD
* @return
*/
static private boolean column2(int column, int value, SudokuGrid SD){
int cnt = 0;
for(int row = 0; row < SD.getN(); row++)
if(SD.getCells()[row][column].getValue() == value) cnt++;
return cnt == 1;
}
/**
* Controlla se il valore della cella c'è più di una volta nella riga
*
* @param row
* @param value
* @param SD
* @return
*/
static private boolean row2(int row, int value, SudokuGrid SD){
int cnt = 0;
for(int col = 0; col < SD.getN(); col++)
if(SD.getCells()[row][col].getValue() == value) cnt++;
return cnt == 1;
}
}