Impl: populate values

This commit is contained in:
Jonas Zeunert
2024-02-20 00:21:37 +01:00
parent d06d55aca9
commit 01439b221e

View File

@@ -24,15 +24,18 @@ impl SudokuSolver {
let possible_values_row = possible_values_from_vec(row, self.playfield.size as u32); let possible_values_row = possible_values_from_vec(row, self.playfield.size as u32);
println!("row {:?}", possible_values_row);
let col_index = open_field % self.playfield.size; let col_index = open_field % self.playfield.size;
let col = self.playfield.get_column(col_index); let col = self.playfield.get_column(col_index);
let possible_values_col = possible_values_from_vec(&col, self.playfield.size as u32); let possible_values_col = possible_values_from_vec(&col, self.playfield.size as u32);
println!("col {:?}", possible_values_col);
let possible_values = possible_values_row let possible_values = possible_values_row
.symmetric_difference(&possible_values_col) .intersection(&possible_values_col)
.map(|v| *v) .map(|v| *v)
.collect(); .collect();
println!("{:?}", possible_values);
let row = &mut self.playfield.fields[row_index]; let row = &mut self.playfield.fields[row_index];
let field = &mut row[col_index]; let field = &mut row[col_index];
field.possible_values = possible_values; field.possible_values = possible_values;
@@ -50,7 +53,7 @@ fn possible_values_from_vec(row: &Vec<Field>, max_value: u32) -> HashSet<u32> {
.collect(); .collect();
possible_values possible_values
.symmetric_difference(&populated_values) .difference(&populated_values)
.map(|v| *v) .map(|v| *v)
.collect() .collect()
} }
@@ -85,10 +88,10 @@ mod tests {
#[test] #[test]
fn simple() { fn simple() {
let solver = &mut setup_solver("1 0 0 3 0 0 2 3 1", 3); let solver = &mut setup_solver("1 0 0 3 0 0 2 3 1", 3);
let expected_1 = vec![2, 3]; let expected_1 = vec![2];
let expected_2 = vec![2, 3]; let expected_2 = vec![3, 2];
let expected_3 = vec![1, 2]; let expected_3 = vec![2, 1];
let expected_4 = vec![1, 2]; let expected_4 = vec![2];
solver.populate_possible_values(); solver.populate_possible_values();
@@ -110,7 +113,7 @@ mod tests {
#[test] #[test]
fn simple() { fn simple() {
let playfield = create_test_playfield("1 2 0 3 0 0 0 0 0", 3); let playfield = create_test_playfield("1 2 0 3 0 0 0 0 0", 3);
let expected_row_1 = vec![3]; let expected_row_1 = HashSet::from_iter(vec![3]);
let expected_row_2 = vec![1, 2]; let expected_row_2 = vec![1, 2];
let expected_row_3 = vec![1, 2, 3]; let expected_row_3 = vec![1, 2, 3];