Simpler mode for faster decisions

This commit is contained in:
Matúš Púll 2024-12-27 02:27:43 +01:00
parent 5dbaa7444f
commit 213209243e
2 changed files with 15 additions and 4 deletions

View file

@ -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;
}

View file

@ -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();
};