From 46f470821b0cd9cba05f5539102a0a0583258e41 Mon Sep 17 00:00:00 2001 From: mxhagen Date: Tue, 24 Sep 2024 18:40:02 +0200 Subject: [PATCH] fix validation of 3x3 blocks --- src/sudoku/validator.rs | 2 +- src/tests/validator.rs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/sudoku/validator.rs b/src/sudoku/validator.rs index 256e9f2..7ba5db5 100644 --- a/src/sudoku/validator.rs +++ b/src/sudoku/validator.rs @@ -22,7 +22,7 @@ pub fn is_solution(sudoku: &Board) -> bool { let mut block_set = 0u16; for j in 0..9 { let tmp = block_set; - block_set ^= 1 << sudoku[i / 3 * 3 + i % 3][j / 3 * 3 + j % 3]; + block_set ^= 1 << sudoku[i / 3 * 3 + j / 3][i % 3 * 3 + j % 3]; if block_set < tmp { return false; } diff --git a/src/tests/validator.rs b/src/tests/validator.rs index 77655f8..e33cfef 100644 --- a/src/tests/validator.rs +++ b/src/tests/validator.rs @@ -47,3 +47,19 @@ fn invalid_unfinished() { ]; assert!(!is_solution(&board)); } + +#[test] +fn invalid_blocks_wrong() { + let board = [ + [5, 6, 9, 3, 7, 8, 1, 2, 4], + [7, 4, 3, 1, 2, 9, 6, 5, 8], + [4, 5, 1, 6, 8, 2, 9, 7, 3], + [9, 8, 6, 7, 4, 5, 3, 1, 2], + [6, 3, 7, 2, 5, 1, 4, 8, 9], + [8, 9, 2, 4, 1, 3, 7, 6, 5], + [3, 1, 8, 5, 6, 4, 2, 9, 7], + [2, 7, 4, 8, 9, 6, 5, 3, 1], + [1, 2, 5, 9, 3, 7, 8, 4, 6], + ]; + assert!(!is_solution(&board)); +}