模拟类
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;
}