aocc23

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

uppga.c (934B)


      1 #include "common.h"
      2 
      3 #define RED 0
      4 #define GREEN 1
      5 #define BLUE 2
      6 
      7 static int test_line(char *line) {
      8   char *cp = line;
      9   long bag[3] = {12, 13, 14};
     10 
     11   while (*cp != '\0') {
     12     if (cp[1] == ' ' && '0' <= cp[0] && cp[0] <= '9') {
     13       char *pp = cp;
     14       while (*pp != ' ')
     15         pp--;
     16       pp++;
     17 
     18       long v = strtol(pp, NULL, 10);
     19 
     20       if (cp[2] == 'r') {
     21         if (bag[RED] < v)
     22           return -1;
     23       } else if (cp[2] == 'g') {
     24         if (bag[GREEN] < v)
     25           return -1;
     26       } else if (cp[2] == 'b') {
     27         if (bag[BLUE] < v)
     28           return -1;
     29       } else {
     30         printf("ERROR\n");
     31         exit(1);
     32       }
     33     }
     34 
     35     cp++;
     36   }
     37 
     38   return 0;
     39 }
     40 
     41 int main(int argc, char **argv) {
     42   char **lines;
     43   size_t nlines = readlines(&lines, "input");
     44 
     45   size_t i;
     46   size_t sum = 0;
     47   for (i = 0; i < nlines; i++) {
     48     if (!test_line(lines[i])) {
     49       sum += (i + 1);
     50     }
     51   }
     52 
     53   printf("%zu\n", sum);
     54 }