#include #include #include #include #include #include #include #include "../board.h" using namespace std; int main() { struct timeval tv; gettimeofday(&tv, nullptr); srandom(tv.tv_sec * 1000000U + tv.tv_usec); string line; getline(cin, line); int nplayers = stoi(line); assert(nplayers == NC); vector players(NC); for (int i = 0; i < NC; i++) { getline(cin, players[i]); } cout << "feature write_lines" << endl; Board bd = Board::makeEmpty(); bd.put(BSZ * BMID + BMID, bd.bag.drawRandom()); uint8_t onturn = 1; while (true) { int pidx; cin >> pidx; if (!cin.good()) break; assert(cin.get() == ' '); getline(cin, line); if ((unsigned)pidx != onturn) { cout << "invalid\nwrite_end" << endl; continue; } istringstream ss(line); int x, y; ss >> x >> y; if (ss.fail()) { cout << "invalid\nwrite_end" << endl; continue; } x += BMID; y += BMID; int idx = BSZ * y + x; if (x <= 1 || x >= BSZ - 1 || y <= 1 || y >= BSZ - 1 || bd[idx] != 0 || !bd.checkEdge(idx)) { cout << "invalid\nwrite_end" << endl; continue; } uint8_t clr = bd.bag.drawRandom(); uint8_t win = bd.putCW(idx, clr); if (win != 0 || (win == 0 && bd.bag.totalLeft() == 0)) { cout << "valid end" << endl; for (int i = 1; i <= NC; i++) { if (i != 1) cout << ' '; if ((unsigned)i == win) cout << 3; else cout << 1; } cout << endl; cout << "write_end" << endl; break; } for (int i = 1; i <= NC; i++) { int x = idx % BSZ - BMID, y = idx / BSZ - BMID; cout << i << " place " << x << ' ' << y << ' ' << (unsigned)clr << endl; } cout << "write_end" << endl; onturn = NEXTTURN(onturn); } }