Update Sudoku Solver to check for naked singles.

This commit is contained in:
Drew Galbraith 2023-04-17 16:48:38 -07:00
parent bcc5b5097e
commit 3dc9f04650
5 changed files with 40 additions and 0 deletions

View file

@ -1,5 +1,6 @@
#include "puzzle.h"
#include <algorithm>
#include <cassert>
#include <iostream>
#include <sstream>
@ -63,6 +64,30 @@ std::string Puzzle::PencilMarkState() {
return temp;
}
bool Puzzle::IsSolved() {
return std::all_of(cells_.begin(), cells_.end(),
[](const Cell& c) { return c.IsSolved(); });
}
bool Puzzle::ApplyNextStep() {
// Search for a naked single.
for (int i = 0; i < 81; i++) {
if (cells_[i].IsSolved()) {
continue;
}
if (cells_[i].NumPossibilities() == 1) {
for (uint8_t v = 1; v <= 9; v++) {
if (cells_[i].IsPossible(v)) {
AssignSquare(i, v);
}
}
return true;
}
}
return false;
}
void Puzzle::AssignSquare(uint8_t id, uint8_t value) {
assert(id < 81);
assert(value >= 0 && value <= 9);