From 230bc798efbe35ee471088691a3c3d2729754d0d Mon Sep 17 00:00:00 2001 From: florian1345 Date: Mon, 5 Apr 2021 16:58:47 +0200 Subject: [PATCH] Applied OnlyCellStrategy-Backtracking fix The fix for issue #56 was already present in non-killer Sudoku in v0.2.0, but never noticed. This PR pushes the fix for this bug in a successor of v0.2.0. --- src/fix_tests.rs | 34 ++++++++++++++++++++++++++++++++++ src/lib.rs | 3 +++ src/solver/strategy/solvers.rs | 9 +-------- 3 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 src/fix_tests.rs diff --git a/src/fix_tests.rs b/src/fix_tests.rs new file mode 100644 index 0000000..ca1875a --- /dev/null +++ b/src/fix_tests.rs @@ -0,0 +1,34 @@ +use crate::{Sudoku, SudokuGrid}; +use crate::constraint::DefaultConstraint; +use crate::solver::{Solution, Solver}; +use crate::solver::strategy::{ + OnlyCellStrategy, + StrategicBacktrackingSolver +}; + +#[test] +fn only_cell_strategic_backtracking() { + let sudoku = Sudoku::parse("3x3; + , , , , ,7,3, , ,\ + ,1,2, , , ,5,4, ,\ + , ,3,4, , , ,1, ,\ + , ,5,6, , , ,8, ,\ + , , , , , , , , ,\ + 7, , , , ,2,4, , ,\ + 6,4,1, , , ,8, , ,\ + 5,3, , , ,6,7, , ,\ + , , , , ,9, , , ", DefaultConstraint).unwrap(); + let solver = StrategicBacktrackingSolver::new(OnlyCellStrategy); + let expected = SudokuGrid::parse("3x3; + 4,5,6,2,1,7,3,9,8,\ + 8,1,2,9,6,3,5,4,7,\ + 9,7,3,4,5,8,6,1,2,\ + 1,2,5,6,7,4,9,8,3,\ + 3,6,4,8,9,1,2,7,5,\ + 7,9,8,5,3,2,4,6,1,\ + 6,4,1,7,2,5,8,3,9,\ + 5,3,9,1,8,6,7,2,4,\ + 2,8,7,3,4,9,1,5,6").unwrap(); + + assert_eq!(Solution::Unique(expected), solver.solve(&sudoku)); +} diff --git a/src/lib.rs b/src/lib.rs index 105fa98..b04315f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -225,6 +225,9 @@ pub mod generator; pub mod solver; pub mod util; +#[cfg(test)] +mod fix_tests; + use constraint::Constraint; use error::{SudokuError, SudokuParseError, SudokuParseResult, SudokuResult}; diff --git a/src/solver/strategy/solvers.rs b/src/solver/strategy/solvers.rs index 06abd6d..97e295f 100644 --- a/src/solver/strategy/solvers.rs +++ b/src/solver/strategy/solvers.rs @@ -130,15 +130,8 @@ impl StrategicBacktrackingSolver { for number in options { let mut sudoku_info = sudoku_info.clone(); - sudoku_info - .enter_cell_no_update(min_options_column, min_options_row, number) + sudoku_info.enter_cell(min_options_column, min_options_row, number) .unwrap(); - let options_info = sudoku_info - .get_options_mut(min_options_column, min_options_row) - .unwrap(); - options_info.clear(); - options_info.insert(number).unwrap(); - let next_solution = self.solve_rec(&mut sudoku_info); solution = solution.union(next_solution);