This commit is contained in:
2025-02-23 09:43:49 -05:00
parent 031fc9c1a6
commit b79ce50ae1

View File

@@ -37,7 +37,67 @@ class Sieve implements Iterator<Integer> {
}
}
class Sudoku {
static boolean solved(int[][] puz) {
// First check the data is shaped correctly.
if (puz.length != 9) return false;
for (int[] row : puz)
if (row.length != 9) return false;
// Make sure they're all valid integers.
for (int[] row : puz)
for (int n : row)
if (n < 1 || n > 9) return false;
// Check that there'ren't any repeats in a row.
for (int[] row : puz) { int[] }
}
}
class Examples {
void testSudoku(Tester t) {
int[][] testPuz1 = {
{5, 3, 4, 6, 7, 8, 9, 1, 2}, {6, 7, 2, 1, 9, 5, 3, 4, 8},
{1, 9, 8, 3, 4, 2, 5, 6, 7}, {8, 5, 9, 7, 6, 1, 4, 2, 3},
{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 = {
{5, 3, 4, 6, 7, 8, 9, 1, 2}, {6, 7, 2, 1, 9, 5, 3, 4, 8},
{1, 9, 8, 3, 4, 2, 5, 6, 7}, {8, 5, 9, 7, 6, 1, 4, 2, 3},
{4, 2, 6, 8, 5, 3, 7, 9, 1}, {7, 1, 3, 9, 2, 4, 8, 5, 6},
{9, 6, 4, 5, 3, 7, 2, 8, 4}, // There're 2 4s here.
{2, 8, 7, 4, 1, 9, 6, 3, 5}, {3, 4, 5, 2, 8, 6, 1, 7, 9}
};
int[][] testPuz3 = {
// Incomplete, missing a row.
{5, 3, 4, 6, 7, 8, 9, 1, 2}, {6, 7, 2, 1, 9, 5, 3, 4, 8},
{1, 9, 8, 3, 4, 2, 5, 6, 7}, {8, 5, 9, 7, 6, 1, 4, 2, 3},
{4, 2, 6, 8, 5, 3, 7, 9, 1}, {7, 1, 3, 9, 2, 4, 8, 5, 6},
{2, 8, 7, 4, 1, 9, 6, 3, 5}, {3, 4, 5, 2, 8, 6, 1, 7, 9}
};
int[][] testPuz4 = {
{5, 3, 4, 6, 7, 8, 9, 1, 2}, {6, 7, 2, 1, 9, 5, 3, 4, 8},
{1, 9, 8, 3, 4, 2, 5, 6, 7}, {8, 5, 9, 7, 6, 1, 4, 2, 3},
{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, 8, 6, 1, 7, 9} // Incomplete, missing a number.
};
int[][] testPuz5 = {
{5, 3, 4, 6, 7, 8, 9, 1, 2}, {6, 7, 2, 1, 9, 5, 3, 4, 8},
{1, 9, 8, 3, 4, 2, 5, 6, 7}, {8, 5, 9, 7, 6, 1, 4, 2, 3},
{4, 2, 6, 0, 5, 3, 7, 9, 1}, // Invalid number.
{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}
};
t.checkExpect(Sudoku.solved(testPuz1), true);
t.checkExpect(Sudoku.solved(testPuz2), false);
t.checkExpect(Sudoku.solved(testPuz3), false);
t.checkExpect(Sudoku.solved(testPuz4), false);
t.checkExpect(Sudoku.solved(testPuz5), false);
}
void testSieve(Tester t) {
Sieve sieve = new Sieve(29);
t.checkExpect(sieve.hasNext(), true);