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 }