|
@@ -289,8 +289,56 @@ impl Sudoku {
|
|
|
}
|
|
|
// Ok, these aren't the ones to save, so:
|
|
|
let rpos = g.items[remove as usize];
|
|
|
- self.possible[rpos as usize].take(&values[0]);
|
|
|
- self.possible[rpos as usize].take(&values[1]);
|
|
|
+ if self.possible[rpos as usize].take(&values[0]).is_some() {
|
|
|
+ found_something = true;
|
|
|
+ };
|
|
|
+ if self.possible[rpos as usize].take(&values[1]).is_some() {
|
|
|
+ found_something = true;
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ // Check the x's and y's to see if we can also process a row/column too.
|
|
|
+ if xy(gpos).0 == xy(fpos).0 {
|
|
|
+ // Matching X - process column
|
|
|
+ let column = xy(gpos).0;
|
|
|
+
|
|
|
+ vpos = 0;
|
|
|
+ for z in self.possible[gpos as usize].iter() {
|
|
|
+ values[vpos] = *z;
|
|
|
+ vpos +=1;
|
|
|
+ }
|
|
|
+ for remove in 0..SIZE {
|
|
|
+ if (remove == xy(gpos).1) || (remove == xy(fpos).1) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if self.possible[pos(column, remove) as usize].take(&values[0]).is_some() {
|
|
|
+ found_something = true;
|
|
|
+ };
|
|
|
+ if self.possible[pos(column, remove) as usize].take(&values[1]).is_some() {
|
|
|
+ found_something = true;
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if xy(gpos).1 == xy(fpos).1 {
|
|
|
+ // Matching Y - process row
|
|
|
+ let row = xy(gpos).1;
|
|
|
+
|
|
|
+ vpos = 0;
|
|
|
+ for z in self.possible[gpos as usize].iter() {
|
|
|
+ values[vpos] = *z;
|
|
|
+ vpos +=1;
|
|
|
+ }
|
|
|
+ for remove in 0..SIZE {
|
|
|
+ if (remove == xy(gpos).0) || (remove == xy(fpos).0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if self.possible[pos(remove, row) as usize].take(&values[0]).is_some() {
|
|
|
+ found_something = true;
|
|
|
+ };
|
|
|
+ if self.possible[pos(remove, row) as usize].take(&values[1]).is_some() {
|
|
|
+ found_something = true;
|
|
|
+ };
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|