blob: 78c4193e3ca94bfd4bb0db628b502987474ad810 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#include <iostream>
#include <sstream>
#include <string>
#include <cassert>
#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<Move> 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;
}
}
|