summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobby Zambito <contact@robbyzambito.me>2025-05-18 20:05:41 -0400
committerRobby Zambito <contact@robbyzambito.me>2025-05-19 08:16:10 -0400
commit2a6552fe76df17e76ee77d6d552e33e1fa41fa11 (patch)
tree38bf3674bd41d33d4e3570b14549b65a85e8ed29
parentb61b7b8a122f3efc9a573777300648ab0eb2a50b (diff)
stylistic changes
-rw-r--r--src/main.zig22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/main.zig b/src/main.zig
index e6975be..496d14f 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -25,13 +25,12 @@ const SudokuSolver = struct {
fn possibleMovesForCell(self: SudokuSolver, row: usize, col: usize) std.StaticBitSet(9) {
var cell_guesses: std.StaticBitSet(9) = .initEmpty();
- const constraints = join(self.rows[row], join(self.cols[col], self.boxes[boxOf(row, col)]));
- inline for (1..10) |n| {
+ const related = join(self.rows[row], join(self.cols[col], self.boxes[boxOf(row, col)]));
+ inline for (0..9) |n| {
// A number is a possible move iff it does not already exist in the current row, col, or box.
- const n_vec: @Vector(@typeInfo(@TypeOf(constraints)).vector.len, u8) = @splat(n);
- const equals = constraints == n_vec;
- if (!@reduce(.Or, equals)) {
- cell_guesses.set(n - 1);
+ const n_vec: @TypeOf(related) = @splat(n + 1);
+ if (!@reduce(.Or, related == n_vec)) {
+ cell_guesses.set(n);
}
}
@@ -95,12 +94,11 @@ const SudokuSolver = struct {
}
fn isSolved(self: SudokuSolver) bool {
- for (self.rows) |row| {
- const z_vec: @Vector(@typeInfo(@TypeOf(row)).vector.len, u8) = @splat(0);
- const equals = row == z_vec;
- if (@reduce(.Or, equals)) return false;
- }
- return true;
+ // Not solved if any row contains a zero.
+ const z_vec: @Vector(9, u8) = @splat(0);
+ return for (self.rows) |row| {
+ if (@reduce(.Or, row == z_vec)) break false;
+ } else true;
}
fn setCell(self: *SudokuSolver, row: usize, col: usize, value: u8) void {