36 } |
36 } |
37 |
37 |
38 public boolean check(Field f) { |
38 public boolean check(Field f) { |
39 int line[]; |
39 int line[]; |
40 for (int i = 0 ; i < 9 ; i++) { |
40 for (int i = 0 ; i < 9 ; i++) { |
41 line = getRow(f, i); |
41 line = f.getRow(i); |
42 if (!valid(line)) { |
42 if (!valid(line)) { |
43 return false; |
43 return false; |
44 } |
44 } |
45 line = getColumn(f, i); |
45 line = f.getColumn(i); |
46 if (!valid(line)) { |
46 if (!valid(line)) { |
47 return false; |
47 return false; |
48 } |
48 } |
49 } |
49 } |
50 |
50 |
51 int square[][]; |
51 int square[][]; |
52 for (int x = 0 ; x < 3 ; x++) { |
52 for (int x = 0 ; x < 3 ; x++) { |
53 for (int y = 0 ; y < 3 ; y++) { |
53 for (int y = 0 ; y < 3 ; y++) { |
54 square = getSquare(f, x, y); |
54 square = f.getSquare(x, y); |
55 if (!valid(square)) { |
55 if (!valid(square)) { |
56 return false; |
56 return false; |
57 } |
57 } |
58 } |
58 } |
59 } |
59 } |
96 } |
97 } |
97 |
98 |
98 private boolean valid(int[][] square) { |
99 private boolean valid(int[][] square) { |
99 int[] line = new int[9]; |
100 int[] line = new int[9]; |
100 for (int x = 0 ; x < 3 ; x++) { |
101 for (int x = 0 ; x < 3 ; x++) { |
101 for (int y = 0 ; y < 3 ; y++) { |
102 System.arraycopy(square[x], 0, line, 3*x, 3); |
102 line[3*x+y] = square[x][y]; |
|
103 } |
|
104 } |
103 } |
105 return valid(line); |
104 return valid(line); |
106 } |
105 } |
107 |
|
108 private int[][] getSquare(Field f, int x, int y) { |
|
109 if (x < 0 || x > 2 || y < 0 || y > 2) { |
|
110 throw new IllegalArgumentException("Invalid square coordinates"); |
|
111 } |
|
112 int[][] square = new int[3][3]; |
|
113 |
|
114 for (int u = 0 ; u < 3 ; u++) { |
|
115 for (int v = 0 ; v < 3 ; v++) { |
|
116 square[u][v] = f.getCellValue(3*x+u, 3*y+v); |
|
117 } |
|
118 } |
|
119 |
|
120 return square; |
|
121 } |
|
122 |
|
123 private int[] getRow(Field f, int y) { |
|
124 if (y < 0 || y > 8) { |
|
125 throw new IllegalArgumentException("Invalid row number"); |
|
126 } |
|
127 int row[] = new int[9]; |
|
128 |
|
129 for (int x = 0 ; x < 9 ; x++) { |
|
130 row[x] = f.getCellValue(x, y); |
|
131 } |
|
132 |
|
133 return row; |
|
134 } |
|
135 |
|
136 private int[] getColumn(Field f, int x) { |
|
137 if (x < 0 || x > 8) { |
|
138 throw new IllegalArgumentException("Invalid column number"); |
|
139 } |
|
140 int column[] = new int[9]; |
|
141 |
|
142 for (int y = 0 ; y < 9 ; y++) { |
|
143 column[y] = f.getCellValue(x, y); |
|
144 } |
|
145 |
|
146 return column; |
|
147 } |
|
148 } |
106 } |