#include char yard[205][205]; int x; int y; int dataset; int limit; int steps; int curr; int cur_num; char cur_dir; int i; int j; int keep; int sq_feet; void printit() { int i; int j; return; printf("Printing ... \n"); for (i = 0; i < 205; i++) { for (j = 0; j < 205; j++) { printf("%c", yard[i][j]); } printf("\n"); } } void main(void) { scanf("%d\n", &limit); for (dataset = 0; dataset < limit; dataset++) { for (i = 0; i < 205; i++) { for (j=0; j < 205; j++) { yard[i][j] = ' '; } } for (i = 0; i < 205; i++) { yard[i][0] = 'O'; yard[i][204] = 'O'; yard[0][i] = 'O'; yard[204][i] = 'O'; } printit(); /* Get start location and movements */ scanf("%d %d %d\n", &x, &y, &steps); x = (x+1) * 2; y = (y+1) * 2; yard[x][y] = 'F'; for (curr = 0; curr < steps; curr++) { scanf("%c %d\n", &cur_dir, &cur_num); yard[x][y] = 'F'; for (i = 0; i < cur_num; i++) { switch (cur_dir) { case 'N': y++; yard[x][y] = 'F'; y++; yard[x][y] = 'F'; break; case 'S': y--; yard[x][y] = 'F'; y--; yard[x][y] = 'F'; break; case 'E': x++; yard[x][y] = 'F'; x++; yard[x][y] = 'F'; break; case 'W': x--; yard[x][y] = 'F'; x--; yard[x][y] = 'F'; break; } } } keep = 1; /* Determine open spaces */ printit(); while (keep) { keep = 0; for (i = 1; i < 205; i++) { for (j=1; j < 205; j++) { if ((yard[i][j] != 'F') && (yard[i][j] != 'O')) { if ((yard[i+1][j] == 'O') || (yard[i-1][j] == 'O') || (yard[i][j+1] == 'O') || (yard[i][j-1] == 'O')) { keep = 1; yard[i][j] = 'O'; } } } } } /* Remove post locations */ for (i = 2; i < 204; i=i+2) { for (j=2; j < 204; j++) { yard[i][j] = 'P'; yard[j][i] = 'P'; } } printit(); sq_feet = 0; for (i = 0; i < 205; i++) { for (j=0; j < 205; j++) { if (yard[i][j] == ' ') sq_feet++; } } printf("Data Set %d: %d square feet.\n", dataset+1, sq_feet); } printf ("End of Output\n"); }