In this HackerEarth Tic-tac-toe problem solution, A game of tic-tac-toe is played on a 3 x 3 square grid. Each cell is either empty (denoted by '.') or occupied by one of the two players ('X' and 'O'). X goes first and then they take turns alternatively. If X is written three times in a straight line, then X wins and the game ends. The same goes for O. If there is no empty cell left, then the game ends as a draw. You are given the description of a game of tic-tac-toe. You have to determine the state of the game.

The states of the game are as follows:
  1. If the game is invalid, that is, if there is no possibility of it happening, output "Wait, what?".
  2. If X has won, then print "X won." else if O has won print "O won.".
  3. If it is a draw, then print "It is a draw.".
  4. Otherwise, print whose turn it is, "X's turn." or "O's turn." accordingly.


HackerEarth Tic-tac-toe problem solution


HackerEarth Tic-tac-toe problem solution.

#include<bits/stdc++.h>
using namespace std;
string A[3];
int Count(char ch)
{
int cnt = 0;
for (int i = 0; i < 3; i ++)
for (int j = 0; j < 3; j ++)
cnt += A[i][j] == ch;
return (cnt);
}
int Win(char ch)
{
int cnt = 0;
for (int i = 0; i < 3; i ++)
cnt += A[i][0] == ch && A[i][1] == ch && A[i][2] == ch,
cnt += A[0][i] == ch && A[1][i] == ch && A[2][i] == ch;
cnt += A[0][0] == ch && A[1][1] == ch && A[2][2] == ch;
cnt += A[0][2] == ch && A[1][1] == ch && A[2][0] == ch;
return (cnt > 0);
}
int main()
{
cin >> A[0] >> A[1] >> A[2];
int Cx = Count('X'), Wx = Win('X');
int Co = Count('O'), Wo = Win('O');
if (Cx < Co)
return !printf("Wait, what?");
if (Cx > Co + 1)
return !printf("Wait, what?");
if (Wx + Wo > 1)
return !printf("Wait, what?");
if (Wx && Cx != Co + 1)
return !printf("Wait, what?");
if (Wx)
return !printf("X won.");
if (Wo && Cx != Co)
return !printf("Wait, what?");
if (Wo)
return !printf("O won.");
if (Cx + Co == 9)
return !printf("It's a draw.");
if (Cx == Co)
return !printf("X's turn.");
return !printf("O's turn.");
}