aocc22

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

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 }