aocc23

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

common.c (1223B)


      1 #include "common.h"
      2 
      3 static inline dline_t decode_line(char *line) {
      4   char *cp = line;
      5   dline_t res;
      6 
      7   cp = sread_next_u64(&res.pt[0], cp);
      8   cp = sread_next_u64(&res.pt[1], cp);
      9   cp = sread_next_u64(&res.pt[2], cp);
     10 
     11   cp = sread_next_i64(&res.dir[0], cp);
     12   cp = sread_next_i64(&res.dir[1], cp);
     13   cp = sread_next_i64(&res.dir[2], cp);
     14 
     15   return res;
     16 }
     17 
     18 void read_pts(pt_t *pts, pt_t *dir, char **lines, size_t nlines) {
     19   size_t i;
     20   dline_t t;
     21 
     22   for (i = 0; i < nlines; i++) {
     23     t = decode_line(lines[i]);
     24 
     25     fmpq_init(pts[i].c[0]);
     26     fmpq_set_si(pts[i].c[0], t.pt[0], 1);
     27     fmpq_init(pts[i].c[1]);
     28     fmpq_set_si(pts[i].c[1], t.pt[1], 1);
     29     fmpq_init(pts[i].c[2]);
     30     fmpq_set_si(pts[i].c[2], t.pt[2], 1);
     31 
     32     fmpq_init(dir[i].c[0]);
     33     fmpq_set_si(dir[i].c[0], t.dir[0], 1);
     34     fmpq_init(dir[i].c[1]);
     35     fmpq_set_si(dir[i].c[1], t.dir[1], 1);
     36     fmpq_init(dir[i].c[2]);
     37     fmpq_set_si(dir[i].c[2], t.dir[2], 1);
     38   }
     39 }
     40 
     41 /* DEBUG */
     42 void print_point(pt_t p) {
     43   printf("(");
     44   fmpq_print(p.c[0]);
     45   printf(", ");
     46   fmpq_print(p.c[1]);
     47   printf(", ");
     48   fmpq_print(p.c[2]);
     49   printf(")");
     50 }
     51 
     52 void print_pp(pt_t p, pt_t q) {
     53   print_point(p);
     54   printf(" :: ");
     55   print_point(q);
     56   printf("\n");
     57 }