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 }