This commit is contained in:
Jacob Signorovitch
2025-02-25 21:20:36 -05:00
parent 6260f1d961
commit 75fd352111

View File

@@ -38,6 +38,8 @@ class Sieve implements Iterator<Integer> {
} }
class Sudoku { class Sudoku {
// Since we know how large the puzzle is, it'd probbaly be more efficient to
// unroll all these loops, though that's no fun.
static boolean solved(int[][] puz) { static boolean solved(int[][] puz) {
if (puz.length != 9) return false; if (puz.length != 9) return false;
@@ -51,10 +53,18 @@ class Sudoku {
} }
int[][] transposed = transpose(puz); int[][] transposed = transpose(puz);
// Check that there'ren't any repeats in a column. // Check there'ren't any repeats in a column.
for (int[] col : transposed) for (int[] col : transposed)
if (isRepetitive(col)) return false; if (isRepetitive(col)) return false;
// Check there'ren't any repeats in a square.
for (int i = 0; i < 9; i++) {
int[] square = new int[3][3];
for (int j = i; j < i + 3; j++) {
for (int k = i; k < i + 3; k++) { square[i][k] }
}
}
return true; return true;
} }
@@ -84,11 +94,15 @@ class Sudoku {
class Examples { class Examples {
void testSudoku(Tester t) { void testSudoku(Tester t) {
int[][] testPuz1 = { int[][] testPuz1 = {
{5, 3, 4, 6, 7, 8, 9, 1, 2}, {6, 7, 2, 1, 9, 5, 3, 4, 8}, {5, 3, 4, 6, 7, 8, 9, 1, 2}, //
{1, 9, 8, 3, 4, 2, 5, 6, 7}, {8, 5, 9, 7, 6, 1, 4, 2, 3}, {6, 7, 2, 1, 9, 5, 3, 4, 8}, //
{4, 2, 6, 8, 5, 3, 7, 9, 1}, {7, 1, 3, 9, 2, 4, 8, 5, 6}, {1, 9, 8, 3, 4, 2, 5, 6, 7}, //
{9, 6, 1, 5, 3, 7, 2, 8, 4}, {2, 8, 7, 4, 1, 9, 6, 3, 5}, {8, 5, 9, 7, 6, 1, 4, 2, 3}, //
{3, 4, 5, 2, 8, 6, 1, 7, 9} {4, 2, 6, 8, 5, 3, 7, 9, 1}, //
{7, 1, 3, 9, 2, 4, 8, 5, 6}, //
{9, 6, 1, 5, 3, 7, 2, 8, 4}, //
{2, 8, 7, 4, 1, 9, 6, 3, 5}, //
{3, 4, 5, 2, 8, 6, 1, 7, 9} //
}; };
int[][] testPuz2 = { int[][] testPuz2 = {
{5, 3, 4, 6, 7, 8, 9, 1, 2}, {6, 7, 2, 1, 9, 5, 3, 4, 8}, {5, 3, 4, 6, 7, 8, 9, 1, 2}, {6, 7, 2, 1, 9, 5, 3, 4, 8},
@@ -129,6 +143,18 @@ class Examples {
{2, 8, 7, 4, 1, 9, 6, 3, 5}, {2, 8, 7, 4, 1, 9, 6, 3, 5},
{3, 4, 5, 2, 8, 6, 1, 7, 9} {3, 4, 5, 2, 8, 6, 1, 7, 9}
}; };
int[][] testPuz7 = {
// No repeats on cols or rows, but many repeats in squares.
{1, 2, 3, 4, 5, 6, 7, 8, 9}, //
{2, 3, 4, 5, 6, 7, 8, 9, 1}, //
{3, 4, 5, 6, 7, 8, 9, 1, 2}, //
{4, 5, 6, 7, 8, 9, 1, 2, 3}, //
{5, 6, 7, 8, 9, 1, 2, 3, 4}, //
{6, 7, 8, 9, 1, 2, 3, 4, 5}, //
{7, 8, 9, 1, 2, 3, 4, 5, 6}, //
{8, 9, 1, 2, 3, 4, 5, 6, 7}, //
{9, 1, 2, 3, 4, 5, 6, 7, 8} //
};
t.checkExpect(Sudoku.solved(testPuz1), true); t.checkExpect(Sudoku.solved(testPuz1), true);
t.checkExpect(Sudoku.solved(testPuz2), false); t.checkExpect(Sudoku.solved(testPuz2), false);
@@ -136,6 +162,7 @@ class Examples {
t.checkExpect(Sudoku.solved(testPuz4), false); t.checkExpect(Sudoku.solved(testPuz4), false);
t.checkExpect(Sudoku.solved(testPuz5), false); t.checkExpect(Sudoku.solved(testPuz5), false);
t.checkExpect(Sudoku.solved(testPuz6), false); t.checkExpect(Sudoku.solved(testPuz6), false);
t.checkExpect(Sudoku.solved(testPuz7), false);
} }
void testSieve(Tester t) { void testSieve(Tester t) {
Sieve sieve = new Sieve(29); Sieve sieve = new Sieve(29);