Simpler mode for faster decisions
This commit is contained in:
parent
5dbaa7444f
commit
213209243e
2 changed files with 15 additions and 4 deletions
16
solver.cpp
16
solver.cpp
|
@ -18,8 +18,9 @@ Solver::Solver(int _N, int _M) : N(_N), M(_M) {
|
|||
}
|
||||
|
||||
vector<int> Solver::guess() {
|
||||
if(possible.size() == pow(M, N)) {
|
||||
cout << "Picking first\n";
|
||||
// First pick
|
||||
if(first_pick) {
|
||||
first_pick = false;
|
||||
vector<int> pick(0);
|
||||
|
||||
int times = N / M + 1;
|
||||
|
@ -30,7 +31,7 @@ vector<int> Solver::guess() {
|
|||
return pick;
|
||||
}
|
||||
|
||||
return minimax({}).guess;
|
||||
return choose_possible().guess;
|
||||
}
|
||||
void Solver::learn(vector<int> guess, Response response) {
|
||||
set<vector<int>> next_possible;
|
||||
|
@ -72,3 +73,12 @@ Weighed_guess Solver::minimax(vector<int> carry) {
|
|||
}
|
||||
return best;
|
||||
}
|
||||
Weighed_guess Solver::choose_possible() {
|
||||
Weighed_guess best = {-1, {}};
|
||||
for(auto sequence : possible) {
|
||||
Weighed_guess next = {get_weight(sequence), sequence};
|
||||
if(best.weight == -1 || next.weight < best.weight)
|
||||
best = next;
|
||||
}
|
||||
return best;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#pragma once
|
||||
#include <set>
|
||||
#include <cmath>
|
||||
#include "global.hpp"
|
||||
|
||||
using std::set;
|
||||
|
@ -17,6 +16,7 @@ struct Weighed_guess {
|
|||
class Solver {
|
||||
int N, M;
|
||||
set<vector<int>> possible;
|
||||
bool first_pick = true;
|
||||
public:
|
||||
Solver(int N, int M);
|
||||
|
||||
|
@ -27,4 +27,5 @@ private:
|
|||
void generate_set(vector<int> carry);
|
||||
int get_weight(vector<int> guess);
|
||||
Weighed_guess minimax(vector<int> carry);
|
||||
Weighed_guess choose_possible();
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue