logik/solver.cpp

52 lines
1 KiB
C++

#include "solver.hpp"
void Solver::generate_set(vector<int> carry) {
if(carry.size() == N) {
possible.push_back(carry);
return;
}
for(int col = 0; col < M; col++) {
carry.push_back(col);
generate_set(carry);
carry.pop_back();
}
}
Solver::Solver(int _N, int _M) : N(_N), M(_M) {
generate_set({});
}
// TODO
vector<int> Solver::guess() {
return {};
}
void Solver::learn(vector<int> guess, Response response) {
vector<vector<int>> next_possible(0);
for(int i = 0; i < possible.size(); i++)
if(validate(possible[i], guess) == response)
next_possible.push_back(possible[i]);
possible = next_possible;
}
// TODO
int Solver::get_weight(vector<int> guess) {
return 0;
}
Weighed_guess Solver::minimax(vector<int> carry) {
if(carry.size() == N)
return {get_weight(carry), carry};
Weighed_guess best = {-1, {}};
for(int col = 0; col < M; col++) {
carry.push_back(col);
Weighed_guess next = minimax(carry);
if(next.weight > best.weight)
best = next;
carry.pop_back();
}
return best;
}