fix validation of 3x3 blocks
This commit is contained in:
parent
2352f3bfda
commit
46f470821b
@ -22,7 +22,7 @@ pub fn is_solution(sudoku: &Board) -> bool {
|
|||||||
let mut block_set = 0u16;
|
let mut block_set = 0u16;
|
||||||
for j in 0..9 {
|
for j in 0..9 {
|
||||||
let tmp = block_set;
|
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 {
|
if block_set < tmp {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,3 +47,19 @@ fn invalid_unfinished() {
|
|||||||
];
|
];
|
||||||
assert!(!is_solution(&board));
|
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));
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user