Move solving logic to a separate class
This commit is contained in:
parent
3dc9f04650
commit
dd89c1fd6c
|
@ -8,6 +8,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
set(SOURCE_FILES
|
set(SOURCE_FILES
|
||||||
solver/cell.cpp
|
solver/cell.cpp
|
||||||
solver/puzzle.cpp
|
solver/puzzle.cpp
|
||||||
|
solver/solver.cpp
|
||||||
solver.cpp
|
solver.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
13
solver.cpp
13
solver.cpp
|
@ -1,16 +1,13 @@
|
||||||
|
#include "solver/solver.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "solver/puzzle.h"
|
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
Puzzle puzzle = Puzzle::FromString(
|
Solver solver(
|
||||||
"3..4.162.1...8.4....5.2.83..578........7..5.3..29.4..748.53..1.2.3.9...."
|
"3..4.162.1...8.4....5.2.83..578........7..5.3..29.4..748.53..1.2.3.9...."
|
||||||
".7...6.9.");
|
".7...6.9.");
|
||||||
while (puzzle.ApplyNextStep())
|
if (!solver.Solve()) {
|
||||||
;
|
|
||||||
if (!puzzle.IsSolved()) {
|
|
||||||
std::cout << "Error! Couldn't Solve" << std::endl;
|
std::cout << "Error! Couldn't Solve" << std::endl;
|
||||||
}
|
}
|
||||||
std::cout << "https://tiramisu.one/sudoku.html?p=" << puzzle.CurrentState()
|
std::cout << solver.StateUrl() << std::endl;
|
||||||
<< "&m=" << puzzle.PencilMarkState() << std::endl;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
#include "solver.h"
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
Solver::Solver(std::string string) : puzzle_(Puzzle::FromString(string)) {}
|
||||||
|
|
||||||
|
bool Solver::Solve() {
|
||||||
|
while (puzzle_.ApplyNextStep()) {
|
||||||
|
}
|
||||||
|
return puzzle_.IsSolved();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Solver::State() { return puzzle_.CurrentState(); }
|
||||||
|
|
||||||
|
std::string Solver::StateUrl() {
|
||||||
|
std::ostringstream stream;
|
||||||
|
stream << "https://tiramisu.one/sudoku.html?p=" << puzzle_.CurrentState()
|
||||||
|
<< "&m=" << puzzle_.PencilMarkState();
|
||||||
|
return stream.str();
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "puzzle.h"
|
||||||
|
|
||||||
|
class Solver {
|
||||||
|
public:
|
||||||
|
Solver(std::string puzz_string);
|
||||||
|
bool Solve();
|
||||||
|
std::string State();
|
||||||
|
std::string StateUrl();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Puzzle puzzle_;
|
||||||
|
};
|
Loading…
Reference in New Issue