#include <stdio.h>
#include <string.h>
#include <ctype.h>
enum piece_type
{
PAWN,KNIGHT,BISHOP,ROOK,QUEEN,KING
};
enum piece_type board[8][8];
//Each side's scores, initialized to their scores at the start of a
//standard chess match.
int score_white = 39;
int score_black = 39;
//Maximum input buffer size. This should be plenty.
const int BUFSIZE = 128;
int get_file_num(char file)
{
return file - (int)'a';
}
//Just a simple way to get the rank number.
int get_rank_num(char rank)
{
return rank - (int)'1';
}
//Get the piece type, based on the character. Uses the gcc range
//extension to simplify the pawn case.
enum piece_type get_piece_type(char pt)
{
switch(pt)
{
case 'a' ... 'h':
return PAWN;
case 'K':
return KING;
case 'N':
return KNIGHT;
case 'Q':
return QUEEN;
case 'R':
return ROOK;
case 'B':
return BISHOP;
default:
return -1;
}
}
//Get the piece's score.
int get_piece_score(enum piece_type type)
{
switch(type)
{
case PAWN:
return 1;
case KNIGHT:
case BISHOP:
return 3;
case ROOK:
return 5;
case QUEEN:
return 9;
default:
return -1;
}
}
//Reads a side's move.
void read_side(char *buf, int *opp_score, int base_rank)
{
int cur = 0;
enum piece_type piece;
board[5][base_rank] = ROOK;
board[6][base_rank] = KING;
return;
}
else if(strncmp("O-O-O", buf
, 5) == 0) { board[3][base_rank] = ROOK;
board[2][base_rank] = KING;
return;
}
//First character is always the piece (In a non-castling situation)
piece = get_piece_type(buf[cur]);
if(piece != PAWN || buf[cur + 1] == 'x')
cur++;
//If the current symbol is only to resolve ambiguity (Nbd2 or Nbxd2), skip it
if(isalpha(buf
[cur
+ 1]) && buf
[cur
] != 'x') cur++;
if(buf[cur] == 'x') { //Capture occurrs
cur++;
enum piece_type cap_piece =
board[get_file_num(buf[cur])][get_rank_num(buf[cur + 1])];
*opp_score -= get_piece_score(cap_piece);
}
//Update board.
board[get_file_num(buf[cur])][get_rank_num(buf[cur + 1])] = piece;
}
void read_line(char *buf)
{
char *black_move
= strchr(buf
, ' '); //Read white, skip the whitespace, then read black
read_side(buf, &score_black, 0);
read_side(black_move + 1, &score_white, 7);
}
int main(void)
{
char input[BUFSIZE];
do {
fgets(input
, BUFSIZE
, stdin
); read_line(input);
printf("%d-%d\n", score_white
, score_black
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgplbnVtIHBpZWNlX3R5cGUKewoJUEFXTixLTklHSFQsQklTSE9QLFJPT0ssUVVFRU4sS0lORwp9OwoKZW51bSBwaWVjZV90eXBlIGJvYXJkWzhdWzhdOwoKLy9FYWNoIHNpZGUncyBzY29yZXMsIGluaXRpYWxpemVkIHRvIHRoZWlyIHNjb3JlcyBhdCB0aGUgc3RhcnQgb2YgYQovL3N0YW5kYXJkIGNoZXNzIG1hdGNoLgppbnQgc2NvcmVfd2hpdGUgPSAzOTsKaW50IHNjb3JlX2JsYWNrID0gMzk7CgovL01heGltdW0gaW5wdXQgYnVmZmVyIHNpemUuIFRoaXMgc2hvdWxkIGJlIHBsZW50eS4KY29uc3QgaW50IEJVRlNJWkUgPSAxMjg7CgppbnQgZ2V0X2ZpbGVfbnVtKGNoYXIgZmlsZSkKewoJcmV0dXJuIGZpbGUgLSAoaW50KSdhJzsKfQoKLy9KdXN0IGEgc2ltcGxlIHdheSB0byBnZXQgdGhlIHJhbmsgbnVtYmVyLgppbnQgZ2V0X3JhbmtfbnVtKGNoYXIgcmFuaykKewoJcmV0dXJuIHJhbmsgLSAoaW50KScxJzsKfQoKLy9HZXQgdGhlIHBpZWNlIHR5cGUsIGJhc2VkIG9uIHRoZSBjaGFyYWN0ZXIuIFVzZXMgdGhlIGdjYyByYW5nZQovL2V4dGVuc2lvbiB0byBzaW1wbGlmeSB0aGUgcGF3biBjYXNlLgplbnVtIHBpZWNlX3R5cGUgZ2V0X3BpZWNlX3R5cGUoY2hhciBwdCkKewoJc3dpdGNoKHB0KQoJewoJY2FzZSAnYScgLi4uICdoJzoKCQlyZXR1cm4gUEFXTjsKCWNhc2UgJ0snOgoJCXJldHVybiBLSU5HOwoJY2FzZSAnTic6CgkJcmV0dXJuIEtOSUdIVDsKCWNhc2UgJ1EnOgoJCXJldHVybiBRVUVFTjsKCWNhc2UgJ1InOgoJCXJldHVybiBST09LOwoJY2FzZSAnQic6CgkJcmV0dXJuIEJJU0hPUDsKCWRlZmF1bHQ6CgkJcmV0dXJuIC0xOwoJfQp9CgovL0dldCB0aGUgcGllY2UncyBzY29yZS4KaW50IGdldF9waWVjZV9zY29yZShlbnVtIHBpZWNlX3R5cGUgdHlwZSkKewoJc3dpdGNoKHR5cGUpCgl7CgljYXNlIFBBV046CgkJcmV0dXJuIDE7CgljYXNlIEtOSUdIVDoKCWNhc2UgQklTSE9QOgoJCXJldHVybiAzOwoJY2FzZSBST09LOgoJCXJldHVybiA1OwoJY2FzZSBRVUVFTjoKCQlyZXR1cm4gOTsKCWRlZmF1bHQ6CgkJcmV0dXJuIC0xOwoJfQp9CgovL1JlYWRzIGEgc2lkZSdzIG1vdmUuCnZvaWQgcmVhZF9zaWRlKGNoYXIgKmJ1ZiwgaW50ICpvcHBfc2NvcmUsIGludCBiYXNlX3JhbmspCnsKCWludCBjdXIgPSAwOwoJZW51bSBwaWVjZV90eXBlIHBpZWNlOwoJaWYoc3RybmNtcCgiTy1PIiwgYnVmLCAzKSA9PSAwKSB7CgkJYm9hcmRbNV1bYmFzZV9yYW5rXSA9IFJPT0s7CgkJYm9hcmRbNl1bYmFzZV9yYW5rXSA9IEtJTkc7CgkJcmV0dXJuOwoJfQoJZWxzZSBpZihzdHJuY21wKCJPLU8tTyIsIGJ1ZiwgNSkgPT0gMCkgewoJCWJvYXJkWzNdW2Jhc2VfcmFua10gPSBST09LOwoJCWJvYXJkWzJdW2Jhc2VfcmFua10gPSBLSU5HOwoJCXJldHVybjsKCX0KCQoJLy9GaXJzdCBjaGFyYWN0ZXIgaXMgYWx3YXlzIHRoZSBwaWVjZSAoSW4gYSBub24tY2FzdGxpbmcgc2l0dWF0aW9uKQoJcGllY2UgPSBnZXRfcGllY2VfdHlwZShidWZbY3VyXSk7CgkKCQoJaWYocGllY2UgIT0gUEFXTiB8fCBidWZbY3VyICsgMV0gPT0gJ3gnKQoJCWN1cisrOwoJCQoJLy9JZiB0aGUgY3VycmVudCBzeW1ib2wgaXMgb25seSB0byByZXNvbHZlIGFtYmlndWl0eSAoTmJkMiBvciBOYnhkMiksIHNraXAgaXQKCWlmKGlzYWxwaGEoYnVmW2N1ciArIDFdKSAmJiBidWZbY3VyXSAhPSAneCcpCgkJY3VyKys7CgkJCglpZihidWZbY3VyXSA9PSAneCcpIHsgLy9DYXB0dXJlIG9jY3VycnMKCQljdXIrKzsKCQllbnVtIHBpZWNlX3R5cGUgY2FwX3BpZWNlID0gCgkJCWJvYXJkW2dldF9maWxlX251bShidWZbY3VyXSldW2dldF9yYW5rX251bShidWZbY3VyICsgMV0pXTsKCQkqb3BwX3Njb3JlIC09IGdldF9waWVjZV9zY29yZShjYXBfcGllY2UpOwoJfQoJLy9VcGRhdGUgYm9hcmQuCglib2FyZFtnZXRfZmlsZV9udW0oYnVmW2N1cl0pXVtnZXRfcmFua19udW0oYnVmW2N1ciArIDFdKV0gPSBwaWVjZTsKfQoKdm9pZCByZWFkX2xpbmUoY2hhciAqYnVmKQp7CgljaGFyICpibGFja19tb3ZlID0gc3RyY2hyKGJ1ZiwgJyAnKTsKCS8vUmVhZCB3aGl0ZSwgc2tpcCB0aGUgd2hpdGVzcGFjZSwgdGhlbiByZWFkIGJsYWNrCglyZWFkX3NpZGUoYnVmLCAmc2NvcmVfYmxhY2ssIDApOwoJcmVhZF9zaWRlKGJsYWNrX21vdmUgKyAxLCAmc2NvcmVfd2hpdGUsIDcpOwp9CgoKaW50IG1haW4odm9pZCkgCnsKCWNoYXIgaW5wdXRbQlVGU0laRV07CglkbyB7CgkJZmdldHMoaW5wdXQsIEJVRlNJWkUsIHN0ZGluKTsKCQlyZWFkX2xpbmUoaW5wdXQpOwoJfSB3aGlsZSghZmVvZihzdGRpbikpOwoJCglwcmludGYoIiVkLSVkXG4iLCBzY29yZV93aGl0ZSwgc2NvcmVfYmxhY2spOwoJcmV0dXJuIDA7Cn0K