52 lines
1 KiB
C++
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;
|
|
}
|