aocc22

Advent of Code 2022
git clone git://www.tkruger.se/aocc22.git
Log | Files | Refs | README

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 }