Back to list of problems
Mutant Flatworld Explorers
118.c
/* Mutant Flatworld Explorers */ #include <stdio.h> int xmax, ymax; int grid[100][100]; int incx(char dir) { switch(dir) { case 'N': return 0; case 'E': return 1; case 'S': return 0; case 'W': return -1; } return 0; } int incy(char dir) { switch(dir) { case 'N': return 1; case 'E': return 0; case 'S': return -1; case 'W': return 0; } return 0; } int main(void) { int i, j; int x, y, x2, y2; char dir; char inst[120]; scanf("%d %d", &xmax, &ymax); for(i=0; i<xmax; i++) { for(j=0; j<ymax; j++) { grid[i][j]=0; } } while(1) { int lost=0; if (scanf("%d %d %c %s", &x, &y, &dir, inst)!=4) { break; } for(i=0; !lost && inst[i]; i++) { switch(inst[i]) { case 'F': x2 = x + incx(dir); y2 = y + incy(dir); if (x2<0 || x2>xmax || y2<0 || y2>ymax) { if (!grid[x][y]) { grid[x][y]=1; lost=1; break; } } else { x = x2; y = y2; } break; case 'L': switch(dir) { case 'N': dir='W'; break; case 'E': dir='N'; break; case 'S': dir='E'; break; case 'W': dir='S'; break; } break; case 'R': switch(dir) { case 'N': dir='E'; break; case 'E': dir='S'; break; case 'S': dir='W'; break; case 'W': dir='N'; break; } break; default: abort(); } } printf("%d %d %c", x, y, dir); if (lost) { printf(" LOST\n"); } else { printf("\n"); } } exit(0); }