aocc23

Advent of Code 2023
git clone git://www.tkruger.se/aocc23.git
Log | Files | Refs | README

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 }