aocc22

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

uppgb.c (799B)


      1 #include "common.h"
      2 
      3 int main(int argc, char **argv) {
      4   char **lines;
      5   size_t nlines = readlines(&lines, "input");
      6 
      7   size_t i, j, k, sum = 0, slen;
      8   smallset a[3];
      9   smallset_init(&a[0], ASIZE);
     10   smallset_init(&a[1], ASIZE);
     11   smallset_init(&a[2], ASIZE);
     12 
     13   for (i = 0; i < nlines; i += 3) {
     14     for (j = 0; j < 3; j++) {
     15       slen = strlen(lines[i + j]);
     16       if (lines[i + j][slen - 1] == '\n')
     17         slen--;
     18       for (k = 0; k < slen; k++)
     19         smallset_insert(&a[j], map(lines[i + j][k]));
     20     }
     21 
     22     smallset_intersection(&a[0], &a[0], &a[1]);
     23     smallset_intersection(&a[0], &a[0], &a[2]);
     24     sum += prio(smallset_getone(&a[0]));
     25 
     26     for (j = 0; j < 3; j++)
     27       smallset_empty(&a[j]);
     28   }
     29   for (j = 0; j < 3; j++)
     30     smallset_clear(&a[j]);
     31 
     32   printf("sum: %zu\n", sum);
     33 }