/* Xiaochi
(Jerry) Wang
Contest #4
Wootton
High School
Intermediate
5 Division */
#include <iostream>
#include <string>
using namespace std;
int CountTakenPieces(char board[8][8], int row, int column,
int direction);
bool PieceToTake(char board[8][8], int row, int column, int
direction);
bool Placeable(char board[8][8], int row, int column, int
direction);
string NewPlacement(int row, int column, int direction, int
length);
int main()
{
string
input;
int x;
int o;
char
board[8][8];
int max =
0;
string
output;
for (int i
= 0; i < 8; i++)
for (int j = 0; j < 8; j++)
board[i][j] = ' ';
cout
<< "INPUT - commas and spaces: ";
getline(cin,
input);
x =
(int)input.at(0) - 48;
o =
(int)input.at(x * 4 + 3) - 48;
for (int i
= 0; i < x; i++)
board[56 - (int)input.at(i * 4 +
3)][(int)input.at(i * 4 + 4) - 65] = 'X';
for (int i
= 0; i < o; i++)
board[56 - (int)input.at(4 * i + 4 *
x + 6)][(int)input.at(4 * i + 4 * x + 7) - 65] = 'O';
for (int i
= 0; i < 8; i++)
for (int j = 0; j < 8; j++)
for (int k = 0; k < 8; k++)
if
(board[i][j] == 'X')
if (CountTakenPieces(board, i, j, k) == max &&
max > 0)
{
output
+= NewPlacement(i, j, k, CountTakenPieces(board, i, j, k));
output
+= ", ";
}
else if (CountTakenPieces(board, i, j, k) > max)
{
max =
CountTakenPieces(board, i, j, k);
output =
"";
output
+= NewPlacement(i, j, k, CountTakenPieces(board, i, j, k));
output
+= ", ";
}
cout
<< "OUTPUT: ";
if (output
== "")
cout << "NONE\n";
else
{
output.resize(output.length() - 2);
cout << output << endl;
}
main();
return (0);
}
int CountTakenPieces(char board[8][8], int row, int column,
int direction)
{
int
piecesTaken = 0;
while
(PieceToTake(board, row, column, direction))
{
piecesTaken++;
switch (direction)
{
case 0: row--; column--; break;
case 1: row--; break;
case 2: row--; column++; break;
case 3: column++; break;
case 4: row++; column++; break;
case 5: row++; break;
case 6: row++; column--; break;
case 7: column--; break;
}
}
if
(!Placeable(board, row, column, direction))
piecesTaken = 0;
return
(piecesTaken);
}
bool PieceToTake(char board[8][8], int row, int column, int
direction)
{
switch
(direction)
{
case 0: if (row - 1 >= 0 && column - 1 >= 0
&& board[row - 1][column - 1] == 'O') return
(true); break;
case 1: if (row - 1 >= 0 && board[row - 1][column] ==
'O') return
(true); break;
case 2: if (row - 1 >= 0 && column + 1 <= 7
&& board[row - 1][column + 1] == 'O') return
(true); break;
case 3: if (column + 1 <= 7 && board[row][column + 1]
== 'O') return
(true); break;
case 4: if (row + 1 <= 7 && column + 1 <= 7
&& board[row + 1][column + 1] == 'O') return
(true); break;
case 5: if (row + 1 <= 7 && board[row + 1][column] ==
'O') return
(true); break;
case 6: if (row + 1 <= 7 && column - 1 >= 0
&& board[row + 1][column - 1] == 'O') return
(true); break;
case 7: if (column - 1 >= 0 && board[row][column - 1]
== 'O'=
) return
(true); break;
}
return
(false);
}
bool Placeable(char board[8][8], int row, int column, int
direction)
{
switch
(direction)
{
case 0: if (row - 1 < 0 || column - 1 < 0 || board[row -
1][column - 1] == 'X') return (false); break;
case 1: if (row - 1 < 0 || board[row - 1][column] == 'X') return (false); break;
case 2: if (row - 1 < 0 || column + 1 > 7 || board[row -
1][column + 1] == 'X') return (false); break;
case 3: if (column + 1 > 7 || board[row][column + 1] == 'X') return
(false); break;
case 4: if (row + 1 > 7 || column + 1 > 7 || board[row +
1][column + 1] == 'X') return (false); break;
case 5: if (row + 1 > 7 || board[row + 1][column] == 'X') return (false); break;
case 6: if (row + 1 > 7 || column - 1 < 0 || board[row +
1][column - 1] == 'X') return (false); break;
case 7: if (column - 1 < 0 || board[row][column - 1] == 'X') return
(false); break;
}
return
(true);
}
string NewPlacement(int row, int column, int direction, int
length)
{
string
placement;
switch
(direction)
{
case 0: placement += (char)(56 - (row - length - 1)); placement
+= (char)(65 + (column - length - 1)); break;
case 1: placement += (char)(56 - (row - length - 1)); placement
+= (char)(65 + column); break;
case 2: placement += (char)(56 - (row - length - 1)); placement
+= (char)(65 + (column + length + 1)); break;
case 3: placement += (char)(56 - row); placement
+= (char)(65 + (column + length + 1)); break;
case 4: placement += (char)(56 - (row + length + 1)); placement
+= (char)(65 + (column + length + 1)); break;
case 5: placement += (char)(56 - (row + length + 1)); placement
+= (char)(65 + column); break;
case 6: placement += (char)(56 - (row + length + 1)); placement
+= (char)(65 + (column - length - 1)); break;
case 7: placement += (char)(56 - row); placement
+= (char)(65 + (column - length - 1)); break;
}
return
(placement);
}