common.c (1098B)
1 #include "common.h" 2 3 uint64_t parse(int *boundaries, char *dirs, uint64_t *times, char **lines, 4 size_t nlines) { 5 uint64_t tot = 0; 6 int cp[2] = {0, 0}; 7 bzero(boundaries, sizeof(*boundaries) * 4); 8 9 size_t i; 10 for (i = 0; i < nlines; i++) { 11 uint64_t tmp; 12 sread_next_u64(&tmp, lines[i]); 13 dirs[i] = lines[i][0]; 14 times[i] = tmp; 15 tot += tmp; 16 17 if (lines[i][0] == 'R') 18 cp[0] += tmp; 19 else if (lines[i][0] == 'L') 20 cp[0] -= tmp; 21 else if (lines[i][0] == 'U') 22 cp[1] += tmp; 23 else if (lines[i][0] == 'D') 24 cp[1] -= tmp; 25 if (cp[0] < boundaries[0]) 26 boundaries[0] = cp[0]; 27 if (cp[0] > boundaries[1]) 28 boundaries[1] = cp[0]; 29 if (cp[1] < boundaries[2]) 30 boundaries[2] = cp[1]; 31 if (cp[1] > boundaries[3]) 32 boundaries[3] = cp[1]; 33 } 34 35 return tot; 36 } 37 38 uint64_t diagon(int *pos, int *boundaries) { 39 uint64_t xpos = (uint64_t)(pos[0] - boundaries[0]); 40 uint64_t ypos = (uint64_t)(pos[1] - boundaries[2]); 41 uint64_t xdim = (uint64_t)(1 + boundaries[1] - boundaries[0]); 42 return ypos * xdim + xpos; 43 }