aocc23

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

uppgb.c (992B)


      1 #include "common.h"
      2 
      3 #define RED 0
      4 #define GREEN 1
      5 #define BLUE 2
      6 
      7 static long line_min_power(char *line) {
      8   char *cp = line;
      9   long min[3] = {0, 0, 0};
     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 (min[RED] < v) {
     22           min[RED] = v;
     23         }
     24       } else if (cp[2] == 'g') {
     25         if (min[GREEN] < v) {
     26           min[GREEN] = v;
     27         }
     28       } else if (cp[2] == 'b') {
     29         if (min[BLUE] < v) {
     30           min[BLUE] = v;
     31         }
     32       } else {
     33         printf("ERROR\n");
     34         exit(1);
     35       }
     36     }
     37 
     38     cp++;
     39   }
     40 
     41   return min[RED] * min[GREEN] * min[BLUE];
     42 }
     43 
     44 int main(int argc, char **argv) {
     45   char **lines;
     46   size_t nlines = readlines(&lines, "input");
     47 
     48   size_t i;
     49   long sum = 0;
     50   for (i = 0; i < nlines; i++) {
     51     sum += line_min_power(lines[i]);
     52   }
     53 
     54   printf("%ld\n", sum);
     55 }