#include #include #include #include "solver.hpp" #include "gen.hpp" #include "validate.hpp" using std::cout; using std::cin; using std::string; using std::vector; // To avoid typos #define BOT "bot" #define HUMAN "human" #define RANDOM "random" int main(void) { // Take game parameters cout << "Length of sequence : "; int N; cin >> N; cout << "Number of colors : "; int M; cin >> M; cout << "Who plays [" << HUMAN << "/" << BOT << "] : "; string player; cin >> player; string gen = RANDOM; if(player == BOT) { cout << "Who generates the sequence [" << HUMAN << "/" << RANDOM << "]: "; cin >> gen; } // Generate the sequence auto sequence = vector(N); if(gen == RANDOM) sequence = generate(N, M); else if(gen == HUMAN) { cout << "Enter " << N << " space-separated numbers from 0 to " << M-1 << std::endl; for(int n = 0; n < N; n++) cin >> sequence[n]; } // Terminal clearing cout << std::endl; // Human info if(player == HUMAN) { cout << "Guesses are " << N << " space-separated numbers from 0 to " << M-1 << std::endl << "Responses are in format [correct out of place] / [correct in place]" << std::endl; cout << std::endl; } // Init solver Solver bot(N, M); // Guessing vector> history = {}; for(int guesses = 0; guesses < 10; guesses++) { vector guess(N), response; // Bot playing if(player == BOT) { guess = bot.guess(); cout << format_guess(guess); response = validate(sequence, guess); cout << format_response(response); bot.learn(guess, response); } // Human playing else if(player == HUMAN) { for(int n = 0; n < N; n++) cin >> guess[n]; response = validate(sequence, guess); cout << format_response(response); } history.push_back(guess); if(response[1] == N) break; } // Terminal clearing cout << std::endl; // Print game statistics cout << "How did the game go\n"; for(auto guess : history) cout << format_guess_history(sequence, guess) << std::endl; return 0; }