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 }