模拟类
Description
This problem is a reverse case of the problem 2996. You are given the output of the problem H and your task is to find the corresponding input.
Input
according to output of problem 2996.
Output
according to input of problem 2996.
Sample Input
White: Ke1,Qd1,Ra1,Rh1,Bc1,Bf1,Nb1,a2,c2,d2,f2,g2,h2,a3,e4
Black: Ke8,Qd8,Ra8,Rh8,Bc8,Ng8,Nc6,a7,b7,c7,d7,e7,f7,h7,h6
Sample Output
+---+---+---+---+---+---+---+---+
|.r.|:::|.b.|:q:|.k.|:::|.n.|:r:|
+---+---+---+---+---+---+---+---+
|:p:|.p.|:p:|.p.|:p:|.p.|:::|.p.|
+---+---+---+---+---+---+---+---+
|...|:::|.n.|:::|...|:::|...|:p:|
+---+---+---+---+---+---+---+---+
|:::|...|:::|...|:::|...|:::|...|
+---+---+---+---+---+---+---+---+
|...|:::|...|:::|.P.|:::|...|:::|
+---+---+---+---+---+---+---+---+
|:P:|...|:::|...|:::|...|:::|...|
+---+---+---+---+---+---+---+---+
|.P.|:::|.P.|:P:|...|:P:|.P.|:P:|
+---+---+---+---+---+---+---+---+
|:R:|.N.|:B:|.Q.|:K:|.B.|:::|.R.|
+---+---+---+---+---+---+---+---+
Source
CTU Open 2005
//
#include < iostream >
#include < string >
using namespace std;
int main( int argc, char * argv[])
{
char chessboard[ 17 ][ 33 ];
// init chessboard
for ( int j = 0 ; j < 33 ; ++ j)
for ( int i = 0 ; i < 17 ; ++ i)
{
if ((i & 1 ) == 0 ) chessboard[i][j] = (j & 3 ) == 0 ? ' + ' : ' - ' ;
else if ((j & 3 ) == 0 ) chessboard[i][j] = ' | ' ;
else chessboard[i][j] = ((j >> 2 ) + (i >> 1 )) & 1 ? ' : ' : ' . ' ;
};
string line;
for ( int k = 0 ; k < 2 ; ++ k)
{
cin >> line;
cin >> line;
int x, y;
const string CAP = " KQRBN " ;
bool white = k == 0 ? true : false ;
char ch;
int i = 0 ;
while (i < line.size())
{
if (CAP.find(line[i]) != - 1 )
{
ch = white ? line[i] : line[i] - ' A ' + ' a ' ;
++ i;
}
else
{
int z = CAP.find(line[i]);
ch = white ? ' P ' : ' p ' ;
}
x = line[i] - ' a ' ;
y = line[i + 1 ] - ' 1 ' ;
x = 2 + x * 4 ;
y = 16 - ( 1 + y * 2 );
chessboard[y][x] = ch;
i += 3 ;
}
}
for ( int i = 0 ; i < 17 ; ++ i)
{
for ( int j = 0 ; j < 33 ; ++ j)
cout << chessboard[i][j];
cout << " \n " ;
}
return 0 ;
}