|
@@ -1046,10 +1046,9 @@ impl AnySolver {
|
|
|
/// Process a move
|
|
|
/// - Remove value from rows, columns, and cells.
|
|
|
/// - Clear possibles from (x,y) position, it's filled.
|
|
|
- /// - Added finalize parameter
|
|
|
/// - Use it when doing a single move.
|
|
|
/// - Don't do it when setting up the board. Call finalize_move then.
|
|
|
- pub fn process_move(&mut self, x: u8, y: u8, value: u8, finalize: bool) {
|
|
|
+ pub fn process_move(&mut self, x: u8, y: u8, value: u8) {
|
|
|
debug_assert!(
|
|
|
x <= self.board.width && y <= self.board.width,
|
|
|
"Expected ({}, {}) <= {}",
|
|
@@ -1082,19 +1081,6 @@ impl AnySolver {
|
|
|
let idx = self.possible.pos(x, y);
|
|
|
self.possible.possible[idx] = Flags::new(self.board.width as usize);
|
|
|
self.board.board[idx] = value;
|
|
|
-
|
|
|
- // Tests are run as debug, and this kills things...
|
|
|
- // Like the invalid board in validated_board test.
|
|
|
- /*
|
|
|
- let cell_index = self.group.which_cell(x, y);
|
|
|
-
|
|
|
- self.cell_poss[cell_index as usize].set(value as usize - 1, false);
|
|
|
- */
|
|
|
-
|
|
|
- if finalize {
|
|
|
- self.finalize_possible();
|
|
|
- // self.finalize_cell(cell_index);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1931,7 +1917,7 @@ impl AnySolver {
|
|
|
// self.board.display();
|
|
|
return false;
|
|
|
}
|
|
|
- self.process_move(x, y, value, false);
|
|
|
+ self.process_move(x, y, value);
|
|
|
} else {
|
|
|
// Below, we check to see if blanks have possible values.
|
|
|
|
|
@@ -1985,7 +1971,7 @@ impl AnySolver {
|
|
|
for x in 0..self.board.width {
|
|
|
let value = self.board.get(x, y);
|
|
|
if value != 0 {
|
|
|
- self.process_move(x, y, value, false);
|
|
|
+ self.process_move(x, y, value);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1997,8 +1983,7 @@ impl AnySolver {
|
|
|
/// - This updates the board.
|
|
|
/// - This updates all the possibles (row,column,cell).
|
|
|
/// - Clears the possible for (x,y) [See process_move].
|
|
|
- /// TO FIX: I think set also needs finalize ... to pass to process_move.
|
|
|
- pub fn set(&mut self, x: u8, y: u8, value: u8, finalize: bool) {
|
|
|
+ pub fn set(&mut self, x: u8, y: u8, value: u8) {
|
|
|
debug_assert!(
|
|
|
x < self.board.width && y < self.board.width,
|
|
|
"Expected ({}, {}) < {}",
|
|
@@ -2015,7 +2000,7 @@ impl AnySolver {
|
|
|
|
|
|
self.board.set(x, y, value);
|
|
|
if value != 0 {
|
|
|
- self.process_move(x, y, value, finalize);
|
|
|
+ self.process_move(x, y, value);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2070,7 +2055,7 @@ impl AnySolver {
|
|
|
for value in available.into_iter() {
|
|
|
assert!(value != 0);
|
|
|
|
|
|
- self.set(x, y, value, true);
|
|
|
+ self.set(x, y, value);
|
|
|
// self.board.display();
|
|
|
// self.possible.display();
|
|
|
|
|
@@ -2125,7 +2110,7 @@ impl AnySolver {
|
|
|
value = self.get(x, y);
|
|
|
}
|
|
|
|
|
|
- self.set(x, y, 0, true);
|
|
|
+ self.set(x, y, 0);
|
|
|
|
|
|
// clone, and solve by logic.
|
|
|
let mut puzcopy = self.clone();
|
|
@@ -2138,7 +2123,7 @@ impl AnySolver {
|
|
|
|
|
|
// Not solvable, restore and return false.
|
|
|
// Since this failed, don't bother to finalize.
|
|
|
- self.set(x, y, value, false);
|
|
|
+ self.set(x, y, value);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -2168,7 +2153,7 @@ impl AnySolver {
|
|
|
let value = self.possible.possible[i].iter().next().unwrap() + 1;
|
|
|
let pos = self.board.xy(i);
|
|
|
// println!("SET {}({},{})={}", i, pos.0 + 1, pos.1 + 1, value);
|
|
|
- self.set(pos.0, pos.1, value as u8, true);
|
|
|
+ self.set(pos.0, pos.1, value as u8);
|
|
|
found_something = true;
|
|
|
}
|
|
|
}
|
|
@@ -2179,6 +2164,7 @@ impl AnySolver {
|
|
|
// - Record that we did something.
|
|
|
pass1 = true;
|
|
|
pass1_again = true;
|
|
|
+ self.finalize_possible();
|
|
|
}
|
|
|
}
|
|
|
pass1
|
|
@@ -2238,7 +2224,7 @@ impl AnySolver {
|
|
|
let xy = this.board.xy(pos);
|
|
|
// this.possible.display();
|
|
|
// this.board.display();
|
|
|
- this.set(xy.0, xy.1, (v + 1) as u8, true);
|
|
|
+ this.set(xy.0, xy.1, (v + 1) as u8);
|
|
|
// println!("SET {} ({},{}) = {}", pos, xy.0 + 1, xy.1 + 1, v+1);
|
|
|
|
|
|
found_something = true;
|