uppga.c (641B)
1 #include "common.h" 2 3 int main(int argc, char **argv) { 4 char **lines; 5 size_t nlines = readlines(&lines, "input"); 6 size_t i; 7 uint64_t card; 8 uint64_t sum = 0; 9 10 smallset ls[nlines], rs[nlines]; 11 12 parse_sets(ls, rs, lines, nlines); 13 14 smallset in[nlines]; 15 16 for (i = 0; i < nlines; i++) { 17 smallset_init(&in[i], 128); 18 smallset_intersection(&in[i], &ls[i], &rs[i]); 19 20 card = smallset_cardinality(&in[i]); 21 if (card != 0) 22 sum += (1 << (card - 1)); 23 } 24 25 printf("%llu\n", sum); 26 27 for (i = 0; i < nlines; i++) { 28 smallset_clear(&in[i]); 29 smallset_clear(&ls[i]); 30 smallset_clear(&rs[i]); 31 } 32 33 return 0; 34 }