6071 unordered_set<char> row[3];
6072 unordered_set<char> col[3];
6073 unordered_set<char> main_diagonal;
6074 unordered_set<char> leading_diagonal;
6075 unordered_set<char> win_1;
6076 auto hash = [](
const pair<char, char> &p) {
6077 vector
vec = {p.first, p.second};
6078 sort(
vec.begin(),
vec.end());
6079 unsigned int val = 0;
6080 for(
auto &ch:
vec) {
6087 unordered_set<pair<char, char>,
decltype(hash)> win_2;
6089 for(
int i = 0; i < 3; i++) {
6090 for(
int j = 0; j < 3; j++) {
6092 row[i].insert(board[i][j]);
6093 col[j].insert(board[i][j]);
6096 main_diagonal.insert(board[0][0]);
6097 main_diagonal.insert(board[1][1]);
6098 main_diagonal.insert(board[2][2]);
6099 leading_diagonal.insert(board[0][2]);
6100 leading_diagonal.insert(board[1][1]);
6101 leading_diagonal.insert(board[2][0]);
6102 for(
int i = 0; i < 3; i++) {
6103 if(row[i].size() == 1) {
6104 win_1.insert(board[i][0]);
6105 }
else if(row[i].size() == 2) {
6106 win_2.insert(make_pair(*row[i].begin(), *++row[i].begin()));
6108 if(col[i].size() == 1) {
6109 win_1.insert(board[0][i]);
6110 }
else if(col[i].size() == 2) {
6111 win_2.insert(make_pair(*col[i].begin(), *++col[i].begin()));
6114 if(main_diagonal.size() == 1) {
6115 win_1.insert(board[1][1]);
6116 }
else if(main_diagonal.size() == 2) {
6117 win_2.insert(make_pair(*main_diagonal.begin(), *++main_diagonal.begin()));
6119 if(leading_diagonal.size() == 1) {
6120 win_1.insert(board[1][1]);
6121 }
else if(leading_diagonal.size() == 2) {
6122 win_2.insert(make_pair(*leading_diagonal.begin(), *++leading_diagonal.begin()));
6124 cout << win_1.size() << endl