Advertisement
juanjo12x

UVA_10284_Chessboard_In_Fen

Jul 27th, 2014
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <string>
  6. #include <cctype>
  7. #include <stack>
  8. #include <queue>
  9. #include <list>
  10. #include <vector>
  11. #include <map>
  12. #include <set>
  13. #include <sstream>
  14. #include <stdlib.h>
  15. #define LL unsigned long long
  16. using namespace std;
  17. char tablero[8][8];
  18.  
  19. void marcar_torre(int i,int j){
  20.      /*atras de j*/
  21.         for(int k=j-1;k>=0;k--){
  22.                 if(tablero[i][k]=='.'){
  23.                         tablero[i][k]='X';
  24.                 }else if(tablero[i][k]!='.' && (tablero[i][k]!='X')){
  25.                     break;
  26.                 }
  27.         }/*para la parte de adelante de la posicion*/
  28.         for(int k=j+1;k<8;k++){
  29.                 if(tablero[i][k]=='.'){
  30.                         tablero[i][k]='X';
  31.                 }else if(tablero[i][k]!='.' && (tablero[i][k]!='X')){
  32.                     break;
  33.                 }
  34.         }
  35.         /*para la parte de arriba de la posicion*/
  36.         for(int k=i-1;k>=0;k--){
  37.                 if(tablero[k][j]=='.'){
  38.                         tablero[k][j]='X';
  39.                 }else if(tablero[k][j]!='.' && (tablero[k][j]!='X')){
  40.                     break;
  41.                 }
  42.         }
  43.         /*para la parte de abajo de la posicion*/
  44.         for(int k=i+1;k<8;k++){
  45.                 if(tablero[k][j]=='.'){
  46.                         tablero[k][j]='X';
  47.                 }else if(tablero[k][j]!='.' && (tablero[k][j]!='X')){
  48.                     break;
  49.                 }
  50.         }
  51. }
  52. void marcar_bishop(int i,int j){
  53.         /*diagonal izquierda superior*/
  54.         for (int k=i-1,l=j-1;k>=0 && l>=0;k--,l--){
  55.                 if(tablero[k][l]=='.'){
  56.                         tablero[k][l]='X';
  57.                 }else if(tablero[k][l]!='.' && (tablero[k][l]!='X')){
  58.                     break;
  59.                 }
  60.         }
  61.         /*diagonal izquierda inferior*/
  62.         for (int k=i+1,l=j-1;l>=0 && k<8;k++,l--){
  63.                 if(tablero[k][l]=='.'){
  64.                         tablero[k][l]='X';
  65.                 }else if(tablero[k][l]!='.' && (tablero[k][l]!='X')){
  66.                     break;
  67.                 }
  68.         }
  69.         /*diagonal derecha superior*/
  70.         for (int k=i-1,l=j+1;k>=0 && l<8;k--,l++){
  71.                 if(tablero[k][l]=='.'){
  72.                         tablero[k][l]='X';
  73.                 }else if(tablero[k][l]!='.' && (tablero[k][l]!='X')){
  74.                     break;
  75.                 }
  76.         }
  77.         /*diagonal derecha inferior*/
  78.         for (int k=i+1,l=j+1;k<8 && l<8;k++,l++){
  79.                 if(tablero[k][l]=='.'){
  80.                         tablero[k][l]='X';
  81.                 }else if(tablero[k][l]!='.' && (tablero[k][l]!='X')){
  82.                     break;
  83.                 }
  84.         }
  85. }
  86. void marcar_queen(int i,int j){
  87.         for(int k=j-1;k>=0;k--){
  88.                 if(tablero[i][k]=='.'){
  89.                         tablero[i][k]='X';
  90.                 }else if(tablero[i][k]!='.' && (tablero[i][k]!='X')){
  91.                     break;
  92.                 }
  93.         }/*para la parte de adelante de la posicion*/
  94.         for(int k=j+1;k<8;k++){
  95.                 if(tablero[i][k]=='.'){
  96.                         tablero[i][k]='X';
  97.                 }else if(tablero[i][k]!='.' && (tablero[i][k]!='X')){
  98.                     break;
  99.                 }
  100.         }
  101.         /*para la parte de arriba de la posicion*/
  102.         for(int k=i-1;k>=0;k--){
  103.                 if(tablero[k][j]=='.'){
  104.                         tablero[k][j]='X';
  105.                 }else if(tablero[k][j]!='.' && (tablero[k][j]!='X')){
  106.                     break;
  107.                 }
  108.         }
  109.         /*para la parte de abajo de la posicion*/
  110.         for(int k=i+1;k<8;k++){
  111.                 if(tablero[k][j]=='.'){
  112.                         tablero[k][j]='X';
  113.                 }else if(tablero[k][j]!='.' && (tablero[k][j]!='X')){
  114.                     break;
  115.                 }
  116.         }
  117.         /*diagonal izquierda superior*/
  118.         for (int k=i-1,l=j-1;k>=0 && l>=0;k--,l--){
  119.                 if(tablero[k][l]=='.'){
  120.                         tablero[k][l]='X';
  121.                 }else if(tablero[k][l]!='.' && (tablero[k][l]!='X')){
  122.                     break;
  123.                 }
  124.         }
  125.         /*diagonal izquierda inferior*/
  126.         for (int k=i+1,l=j-1;l>=0 && k<8;k++,l--){
  127.                 if(tablero[k][l]=='.'){
  128.                         tablero[k][l]='X';
  129.                 }else if(tablero[k][l]!='.' && (tablero[k][l]!='X')){
  130.                     break;
  131.                 }
  132.         }
  133.         /*diagonal derecha superior*/
  134.         for (int k=i-1,l=j+1;k>=0 && l<8;k--,l++){
  135.                 if(tablero[k][l]=='.'){
  136.                         tablero[k][l]='X';
  137.                 }else if(tablero[k][l]!='.' && (tablero[k][l]!='X')){
  138.                     break;
  139.                 }
  140.         }
  141.         /*diagonal derecha inferior*/
  142.         for (int k=i+1,l=j+1;k<8 && l<8;k++,l++){
  143.                 if(tablero[k][l]=='.'){
  144.                         tablero[k][l]='X';
  145.                 }else if(tablero[k][l]!='.' && (tablero[k][l]!='X')){
  146.                     break;
  147.                 }
  148.         }
  149. }
  150.  
  151. void marcar_knight(int i,int j){
  152.         int nx,ny;
  153.   nx=i-2; ny=j-1; if(tablero[nx][ny]=='.' && nx>=0 && ny>=0) tablero[nx][ny]='X';
  154.   nx=i-2; ny=j+1; if(tablero[nx][ny]=='.' && nx>=0 && ny<8) tablero[nx][ny]='X';
  155.   nx=i-1; ny=j+2; if(tablero[nx][ny]=='.' && nx>=0 && ny<8) tablero[nx][ny]='X';
  156.   nx=i-1; ny=j-2; if(tablero[nx][ny]=='.' && nx>=0 && ny>=0) tablero[nx][ny]='X';
  157.   nx=i+1; ny=j-2; if(tablero[nx][ny]=='.' && nx<8 && ny>=0) tablero[nx][ny]='X';
  158.   nx=i+1; ny=j+2; if(tablero[nx][ny]=='.' && nx<8&& ny<8) tablero[nx][ny]='X';
  159.   nx=i+2; ny=j-1; if(tablero[nx][ny]=='.' && nx<8 && ny>=0) tablero[nx][ny]='X';
  160.   nx=i+2; ny=j+1; if(tablero[nx][ny]=='.' && nx<8 && ny<8) tablero[nx][ny]='X';
  161. }
  162. void marcar_king(int i,int j){
  163.         int nx,ny;
  164. nx=i-1; ny=j-1; if(tablero[nx][ny]=='.' && nx>=0 && ny>=0) tablero[nx][ny]='X';
  165. nx=i-1; ny=j+1; if(tablero[nx][ny]=='.' && nx>=0 && ny<8) tablero[nx][ny]='X';
  166. nx=i-1; ny=j; if(tablero[nx][ny]=='.' && nx>=0) tablero[nx][ny]='X';
  167. nx=i; ny=j-1; if(tablero[nx][ny]=='.' && ny>=0) tablero[nx][ny]='X';
  168. nx=i; ny=j+1; if(tablero[nx][ny]=='.' && ny<8) tablero[nx][ny]='X';
  169. nx=i+1; ny=j+1; if(tablero[nx][ny]=='.' && nx<8&& ny<8) tablero[nx][ny]='X';
  170. nx=i+1; ny=j-1; if(tablero[nx][ny]=='.' && nx<8 && ny>=0) tablero[nx][ny]='X';
  171. nx=i+1; ny=j; if(tablero[nx][ny]=='.' && nx<8) tablero[nx][ny]='X';
  172. }
  173. void marcar_black_pawn(int i,int j){
  174.         int nx,ny;
  175.         nx=i+1; ny=j+1; if(tablero[nx][ny]=='.' && nx<8&& ny<8) tablero[nx][ny]='X';
  176.         nx=i+1; ny=j-1; if(tablero[nx][ny]=='.' && nx<8 && ny>=0) tablero[nx][ny]='X';
  177.        
  178. }
  179. void marcar_white_pawn(int i,int j){
  180.         int nx,ny;
  181.         nx=i-1; ny=j-1; if(tablero[nx][ny]=='.' && nx>=0 && ny>=0) tablero[nx][ny]='X';
  182.     nx=i-1; ny=j+1; if(tablero[nx][ny]=='.' && nx>=0 && ny<8) tablero[nx][ny]='X';
  183. }
  184. int main() {
  185.         int i,j,n,cont,empty;
  186.         i=0;j=0;cont=0;
  187.         char cad[200];
  188.         while(scanf("%s",&cad)!=EOF){
  189.                 for(int k=0;k<8;k++){
  190.                         for(int l=0;l<8;l++){
  191.                                 tablero[k][l]='.';
  192.                         }
  193.                 }
  194.                 empty=0;i=0;cont=0;
  195.                
  196.                 while(i<8){
  197.                         j=0;
  198.                         while(j<8 && cad[cont]!='/'){
  199.                                 if(isdigit(cad[cont])){
  200.                                         n=cad[cont]-'0';
  201.                                         for(int k=0;k<n;k++) {
  202.                                           j++;
  203.                                         }
  204.                                         cont++;
  205.                                 }else  {
  206.                                     tablero[i][j]=cad[cont];
  207.                                     j++;cont++;
  208.                                 }
  209.                         }
  210.                         i++;cont++;
  211.                 }
  212.                 for (int k=0;k<8;k++){
  213.                     for(int l=0;l<8;l++){
  214.                         if(tablero[k][l]=='r' || tablero[k][l]=='R'){
  215.                             marcar_torre(k,l);
  216.                         }else if(tablero[k][l]=='n'|| tablero[k][l]=='N'){
  217.                             marcar_knight(k,l);
  218.                         }else if(tablero[k][l]=='q' || tablero[k][l]=='Q'){
  219.                             marcar_queen(k,l);
  220.                         }else if(tablero[k][l]=='b' || tablero[k][l]=='B'){
  221.                             marcar_bishop(k,l);
  222.                         }else if(tablero[k][l]=='k' || tablero[k][l]=='K'){
  223.                             marcar_king(k,l);
  224.                         }else if(tablero[k][l]=='p'){
  225.                             marcar_black_pawn(k,l);
  226.                         }else if(tablero[k][l]=='P'){
  227.                             marcar_white_pawn(k,l);
  228.                         }else continue;
  229.                     }
  230.                 }
  231.                 /*ahora basta observar los espacios que aun son '.'*/
  232.                 for(int k=0;k<8;k++){
  233.                         for(int l=0;l<8;l++){
  234.                                 if(tablero[k][l]=='.') empty++;
  235.                         }
  236.                 }
  237.                 printf("%d\n",empty);
  238.                
  239.         }
  240.         return 0;
  241. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement