Advertisement
iocoder

Correct Move

Feb 1st, 2013
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.01 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #define QUEENMOVE(NEWCELL)  if (!j) NEWCELL = 0; \
  4.                 else if (!NEWCELL)  NEWCELL = 4; \
  5.                 else if (NEWCELL == 3)  NEWCELL = 5;\
  6.                 else if (NEWCELL == 1)  j = 0;
  7. int main() {
  8.     // Correct Move.
  9.     // after reading the statement: WTF!!!
  10.  
  11.     int k, q, n; // king, queen, new_queen.
  12.     int i, j;
  13.     while(scanf("%d%d%d", &k, &q, &n) != EOF) {
  14.         int k_col = k%8, k_row = k/8;
  15.         int q_col = q%8, q_row = q/8;
  16.         int n_col = n%8, n_row = n/8;
  17.  
  18.         if (k == q)
  19.             // given state is illegal.
  20.             printf("Illegal state\n");
  21.         else {
  22.             unsigned char board[8][8] = {0};
  23.             board[k_row][k_col] = 1;
  24.             board[q_row][q_col] = 2;
  25.  
  26.             // places where king can move to:
  27.             if (k_col != 0) board[k_row][k_col-1] = 3;
  28.             if (k_col != 7) board[k_row][k_col+1] = 3;
  29.             if (k_row != 0) board[k_row-1][k_col] = 3;
  30.             if (k_row != 7) board[k_row+1][k_col] = 3;
  31.  
  32.             // places where queen is allowed move to:
  33.             for (i = q_col+1, j = 1; i <= 7; i++) QUEENMOVE(board[q_row][i]);
  34.             for (i = q_col-1, j = 1; i >= 0; i--) QUEENMOVE(board[q_row][i]);
  35.             for (i = q_row+1, j = 1; i <= 7; i++) QUEENMOVE(board[i][q_col]);
  36.             for (i = q_row-1, j = 1; i >= 0; i--) QUEENMOVE(board[i][q_col]);
  37.  
  38.             if (board[n_row][n_col] == 0 || board[n_row][n_col] == 1 || board[n_row][n_col] == 2  || board[n_row][n_col] == 3)
  39.                 printf("Illegal move\n");
  40.             else if (board[n_row][n_col] == 5)
  41.                 // the move is legal, but not allowed (Graph 2).
  42.                 printf("Move not allowed\n");
  43.             else {
  44.                 int counter = 0;
  45.                 if (k_col != 0 && !(k_col-1 == n_col || k_row == n_row)) counter++;
  46.                 if (k_col != 7 && !(k_col+1 == n_col || k_row == n_row)) counter++;
  47.                 if (k_row != 0 && !(k_row-1 == n_row || k_col == n_col)) counter++;
  48.                 if (k_row != 7 && !(k_row+1 == n_row || k_col == n_col)) counter++;
  49.                 if (counter)
  50.                     printf("Continue\n");
  51.                 else
  52.                     printf("Stop\n");
  53.             }
  54.             //DEBUG:
  55.             // for (i = 0; i < 8; i++)
  56.             //  for (j = 0; j < 8; j++)
  57.             //      printf("%d%s", board[i][j], j == 7 ? "\n":" ");
  58.         }
  59.     }
  60.    
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement