#include #include #include #include #include "../board.h" struct MoveLine { int pindex; string line; }; MoveLine readMoveLine() { while (true) { if (!isspace(cin.peek())) break; cin.get(); } MoveLine ml; cin >> ml.pindex; if (!cin) exit(0); assert(cin.get() == ' '); getline(cin, ml.line); return ml; } int8_t playerToClr(int player) { return 2 * player - 1; } int main() { Board bd = Board::makeInitial(); int nplayers; cin >> nplayers; assert(nplayers == 2); cin.ignore(1000, '\n'); string p1, p2; getline(cin, p1); getline(cin, p2); int onturn = 0; while (true) { MoveLine ml = readMoveLine(); if (ml.pindex != onturn) { cout << "invalid" << endl; continue; } optional mv = Move::parse(ml.line); if (mv && !bd.isValid(*mv, playerToClr(onturn))) { cout << "invalid" << endl; continue; } int win = bd.applyCW(*mv); if (win != 0) { cout << "valid end" << endl; if (win == -1) cout << "3 1" << endl; else if (win == 1) cout << "1 3" << endl; break; } else { cout << "valid" << endl; } onturn = !onturn; } }