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() { vector<int> Solver::guess() {
if(possible.size() == pow(M, N)) { // First pick
cout << "Picking first\n"; if(first_pick) {
first_pick = false;
vector<int> pick(0); vector<int> pick(0);
int times = N / M + 1; int times = N / M + 1;
@ -30,7 +31,7 @@ vector<int> Solver::guess() {
return pick; return pick;
} }
return minimax({}).guess; return choose_possible().guess;
} }
void Solver::learn(vector<int> guess, Response response) { void Solver::learn(vector<int> guess, Response response) {
set<vector<int>> next_possible; set<vector<int>> next_possible;
@ -72,3 +73,12 @@ Weighed_guess Solver::minimax(vector<int> carry) {
} }
return best; 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 #pragma once
#include <set> #include <set>
#include <cmath>
#include "global.hpp" #include "global.hpp"
using std::set; using std::set;
@ -17,6 +16,7 @@ struct Weighed_guess {
class Solver { class Solver {
int N, M; int N, M;
set<vector<int>> possible; set<vector<int>> possible;
bool first_pick = true;
public: public:
Solver(int N, int M); Solver(int N, int M);
@ -27,4 +27,5 @@ private:
void generate_set(vector<int> carry); void generate_set(vector<int> carry);
int get_weight(vector<int> guess); int get_weight(vector<int> guess);
Weighed_guess minimax(vector<int> carry); Weighed_guess minimax(vector<int> carry);
Weighed_guess choose_possible();
}; };