uppgb.c (718B)
1 #include <assert.h> 2 #include <reading.h> 3 #include <stdint.h> 4 #include <stdio.h> 5 #include <string.h> 6 7 static inline uint64_t choose(char opp, char ldw) { 8 int oppi = (int)(opp - 'A'); 9 int ldwi = (int)(ldw - 'X'); 10 uint64_t sc[9] = {3, 1, 2, 1, 2, 3, 2, 3, 1}; 11 12 assert(oppi < 3); 13 assert(0 <= oppi); 14 assert(ldwi < 3); 15 assert(0 <= ldwi); 16 17 return sc[oppi + 3 * ldwi] + (3 * ldwi); 18 } 19 20 static inline uint64_t line_score(char *line) { 21 return choose(line[0], line[2]); 22 } 23 24 int main(int argc, char **argv) { 25 char **lines; 26 size_t nlines = readlines(&lines, "input"); 27 28 uint64_t score = 0; 29 size_t i; 30 for (i = 0; i < nlines; i++) { 31 score += line_score(lines[i]); 32 } 33 printf("score: %llu\n", score); 34 }