uppga.c (958B)
1 #include "common.h" 2 3 #define MAXCORNERS 2048 4 5 static inline pos_t to_move(const char dir, const int64_t n) { 6 pos_t res; 7 switch (dir) { 8 case 'U': 9 res = (pos_t){0, n}; 10 break; 11 case 'R': 12 res = (pos_t){n, 0}; 13 break; 14 case 'D': 15 res = (pos_t){0, -n}; 16 break; 17 case 'L': 18 res = (pos_t){-n, 0}; 19 break; 20 } 21 return res; 22 } 23 24 int main() { 25 pos_t cornetto[MAXCORNERS]; 26 cornetto[0].x = 0; 27 cornetto[0].y = 0; 28 size_t ncornetto = 1; 29 FILE *f = fopen("input", "r"); 30 char col[8]; 31 col[7] = '\0'; 32 char dir; 33 int64_t n; 34 35 while (ncornetto < MAXCORNERS && 36 fscanf(f, "%c %lld (%7s)\n", &dir, &n, &col) != EOF) { 37 pos_t move = to_move(dir, n); 38 cornetto[ncornetto].x = cornetto[ncornetto - 1].x + move.x; 39 cornetto[ncornetto].y = cornetto[ncornetto - 1].y + move.y; 40 ncornetto++; 41 } 42 assert(ncornetto < MAXCORNERS); 43 44 int64_t a = area(cornetto, ncornetto); 45 printf("area = %lld\n", a); 46 47 fclose(f); 48 }