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
|
||||
solver/cell.cpp
|
||||
solver/puzzle.cpp
|
||||
solver/solver.cpp
|
||||
solver.cpp
|
||||
)
|
||||
|
||||
|
|
13
solver.cpp
13
solver.cpp
|
@ -1,16 +1,13 @@
|
|||
#include "solver/solver.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "solver/puzzle.h"
|
||||
|
||||
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...."
|
||||
".7...6.9.");
|
||||
while (puzzle.ApplyNextStep())
|
||||
;
|
||||
if (!puzzle.IsSolved()) {
|
||||
if (!solver.Solve()) {
|
||||
std::cout << "Error! Couldn't Solve" << std::endl;
|
||||
}
|
||||
std::cout << "https://tiramisu.one/sudoku.html?p=" << puzzle.CurrentState()
|
||||
<< "&m=" << puzzle.PencilMarkState() << std::endl;
|
||||
std::cout << solver.StateUrl() << 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