aocc22

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

common.c (1225B)


      1 #include "common.h"
      2 
      3 void print_blueprint(blueprint *bp) {
      4   size_t i, j;
      5   for (i = 0; i < RTYPES; i++) {
      6     printf("(%zu):\t", i);
      7     for (j = 0; j < MTYPES; j++) {
      8       printf("%llu\t", bp->c[i][j]);
      9     }
     10     printf("\n");
     11   }
     12 }
     13 
     14 blueprint *parse(char **lines, size_t nlines) {
     15   uint64_t idx;
     16   blueprint *bps = malloc(nlines * sizeof(*bps));
     17 
     18   size_t i;
     19   for (i = 0; i < nlines; i++) {
     20     char *line = lines[i];
     21     memset(bps[i].c, 0, RTYPES * MTYPES * sizeof(bps[i].c[0][0]));
     22     line = sread_next_u64(&idx, line);
     23     line = sread_next_u64(&bps[i].c[ORE][ORE], line);
     24     line = sread_next_u64(&bps[i].c[CLA][ORE], line);
     25     line = sread_next_u64(&bps[i].c[OBS][ORE], line);
     26     line = sread_next_u64(&bps[i].c[OBS][CLA], line);
     27     line = sread_next_u64(&bps[i].c[GEO][ORE], line);
     28     line = sread_next_u64(&bps[i].c[GEO][OBS], line);
     29   }
     30 
     31   return bps;
     32 }
     33 
     34 state start_state() {
     35   state s;
     36 
     37   memset(s.nmin, 0, MTYPES * sizeof(s.nmin[0]));
     38   s.nrob[ORE] = 1;
     39   s.nrob[CLA] = 0;
     40   s.nrob[OBS] = 0;
     41   s.nrob[GEO] = 0;
     42 
     43   return s;
     44 }
     45 
     46 state empty_state() {
     47   state s;
     48 
     49   memset(s.nmin, 0, MTYPES * sizeof(s.nmin[0]));
     50   s.nrob[CLA] = 0;
     51   s.nrob[OBS] = 0;
     52   s.nrob[GEO] = 0;
     53   s.nrob[ORE] = 0;
     54 
     55   return s;
     56 }