Made the strategy work
This commit is contained in:
parent
c095843041
commit
604f229cd8
2 changed files with 21 additions and 6 deletions
22
solver.cpp
22
solver.cpp
|
@ -2,7 +2,7 @@
|
|||
|
||||
void Solver::generate_set(vector<int> carry) {
|
||||
if(carry.size() == N) {
|
||||
possible.push_back(carry);
|
||||
possible.insert(carry);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -21,17 +21,29 @@ vector<int> Solver::guess() {
|
|||
return minimax({}).guess;
|
||||
}
|
||||
void Solver::learn(vector<int> guess, Response response) {
|
||||
vector<vector<int>> next_possible(0);
|
||||
set<vector<int>> next_possible;
|
||||
for(auto sequence : possible)
|
||||
if(validate(sequence, guess) == response)
|
||||
next_possible.push_back(sequence);
|
||||
next_possible.insert(sequence);
|
||||
|
||||
possible = next_possible;
|
||||
}
|
||||
|
||||
// TODO
|
||||
int Solver::get_weight(vector<int> guess) {
|
||||
return 0;
|
||||
// Indexing by N*somewhere + correct and holding how many sequences got that response
|
||||
vector<int> response_count(N*N+1, 0);
|
||||
for(auto sequence : possible) {
|
||||
Response response = validate(sequence, guess);
|
||||
response_count[N*response.somewhere + response.correct]++;
|
||||
}
|
||||
|
||||
// Get highest possible number of sequences left
|
||||
int max = 0;
|
||||
for(int count : response_count)
|
||||
if(count > max)
|
||||
max = count;
|
||||
return max - possible.count(guess);
|
||||
}
|
||||
Weighed_guess Solver::minimax(vector<int> carry) {
|
||||
if(carry.size() == N)
|
||||
|
@ -42,7 +54,7 @@ Weighed_guess Solver::minimax(vector<int> carry) {
|
|||
carry.push_back(col);
|
||||
|
||||
Weighed_guess next = minimax(carry);
|
||||
if(next.weight > best.weight)
|
||||
if(best.weight == -1 || next.weight < best.weight)
|
||||
best = next;
|
||||
|
||||
carry.pop_back();
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#pragma once
|
||||
#include <set>
|
||||
#include "global.hpp"
|
||||
|
||||
using std::set;
|
||||
|
||||
// For deciding the best guess
|
||||
struct Weighed_guess {
|
||||
int weight;
|
||||
|
@ -12,7 +15,7 @@ struct Weighed_guess {
|
|||
// Solving the game
|
||||
class Solver {
|
||||
int N, M;
|
||||
vector<vector<int>> possible = vector<vector<int>>(0);
|
||||
set<vector<int>> possible;
|
||||
public:
|
||||
Solver(int N, int M);
|
||||
|
||||
|
|
Loading…
Reference in a new issue