// WA: problem statement does not match interactor #include #include #include #include #include using namespace std; vector primes(size_t start, size_t end) { vector is_prime(end, true); for(size_t i = 2; i < end; i++){ if(is_prime[i]) { for(size_t j = 2*i; j < end; j+=i) is_prime[j] = false; } } vector prms; for(size_t i = start; i < end; i++) { if(is_prime[i]) prms.push_back(to_string(i)); } return prms; } // TODO: fix depending on new problem statement. bool valid(string prime, string guess, string res) { for(size_t i = 0; i < 5; i++) { if(res[i]=='g') { if(prime[i]!=guess[i]) { return false; } } else if(res[i]=='w') { for(size_t j = 0; j < 5; j++) { if(prime[j]==guess[i]) { return false; } } } else if(res[i]=='y') { bool found = false; for(size_t j = 0; j < 5; j++) { if(prime[j]==guess[i]) { found = true; } } if(!found){ return false; } } } return true; } int main() { int n; cin >> n; srand (time(NULL)); auto prms = primes(10000, 100'000); size_t total_primes = prms.size(); string query0 = string("97861"); string query1 = string("50423"); string response; for(size_t s = 0; s < n; s++) { std::vector queries = {query0, query1}; std::vector solution(total_primes, true); size_t nr_solutions = total_primes; for(size_t r = 0; r < 5; r++) { if(nr_solutions==0) { cerr << "valid does not match interactor" << endl; break; } // make up random query from feasible solutions if(r>=2) { int choice = 0 % nr_solutions; int found = 0; for(size_t i = 0; i < total_primes; i++) { if(solution[i]) { if(choice == found) { queries.push_back(prms[i]); break; } found++; } } } cerr << queries[r] << endl; cout << queries[r] << endl; cin >> response; cerr << response << endl; if(response=="ggggg") break; for(size_t i = 0; i < total_primes; i++){ if(solution[i]) { if(!valid(prms[i], queries[r], response)) { nr_solutions--; solution[i] = false; } } } } } return 0; }