uppga.c (871B)
1 #include <assert.h> 2 #include <reading.h> 3 #include <stdint.h> 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <string.h> 7 8 static uint64_t nscore[256]; 9 10 static inline uint64_t line_score(char *line) { 11 char *strs[9] = {"A X\n", "A Y\n", "A Z\n", "B X\n", "B Y\n", 12 "B Z\n", "C X\n", "C Y\n", "C Z\n"}; 13 uint64_t scores[9] = {3, 6, 0, 0, 3, 6, 6, 0, 3}; 14 size_t i; 15 16 for (i = 0; i < 9; i++) { 17 if (strncmp(strs[i], line, 3) == 0) 18 return nscore[(int)line[2]] + scores[i]; 19 } 20 21 // unreachable 22 perror("Non-indexed string error."); 23 exit(1); 24 } 25 26 int main(int argc, char **argv) { 27 char **lines; 28 size_t nlines = readlines(&lines, "input"); 29 30 nscore['X'] = 1; 31 nscore['Y'] = 2; 32 nscore['Z'] = 3; 33 34 uint64_t score = 0; 35 size_t i; 36 for (i = 0; i < nlines; i++) { 37 score += line_score(lines[i]); 38 } 39 printf("score: %llu\n", score); 40 }