this repo has no description

day 1, part 2

+31 -13
+31 -13
1/main.c
··· 1 - shail@debian13:~/Coding/advent_of_code_2025/1$ cat main.c 2 #include <stdint.h> 3 #include <stdio.h> 4 #include <assert.h> 5 #include <string.h> 6 #include <stdlib.h> 7 8 - int circular_mod(const int x); 9 10 typedef struct Lock { 11 int position; //0-99 ··· 17 l->zero_count = 0; 18 } 19 20 - void Lock_rotate(Lock* lock, char direction, int distance) { 21 lock->position = (direction == 'L') ? 22 circular_mod(lock->position - distance) : 23 circular_mod(lock->position + distance); ··· 27 lock->zero_count += 1; 28 } 29 30 - int circular_mod(const int x) { 31 - int result = x % 100; 32 - if (result < 0) { 33 - result += 100; 34 - } 35 36 - return result; 37 } 38 39 int main(int argc, char ** argv) { ··· 42 FILE *file = fopen(argv[1], "r"); 43 assert(file != NULL); 44 45 - Lock lock; 46 - Lock_init(&lock); 47 48 static const int LINE_BUFFER = 6; 49 char line[LINE_BUFFER]; ··· 57 const int distance = atoi(line + 1); 58 59 assert(direction == 'L' || direction == 'R'); 60 - Lock_rotate(&lock, direction, distance); 61 } 62 63 fclose(file); 64 - printf("Part 1: %d\n", lock.zero_count); 65 }
··· 1 #include <stdint.h> 2 #include <stdio.h> 3 #include <assert.h> 4 #include <string.h> 5 #include <stdlib.h> 6 7 + int circular_mod(const int x) { 8 + int result = x % 100; 9 + if (result < 0) { 10 + result += 100; 11 + } 12 + 13 + return result; 14 + } 15 16 typedef struct Lock { 17 int position; //0-99 ··· 23 l->zero_count = 0; 24 } 25 26 + void Lock_rotate(Lock* lock, const char direction, const int distance) { 27 lock->position = (direction == 'L') ? 28 circular_mod(lock->position - distance) : 29 circular_mod(lock->position + distance); ··· 33 lock->zero_count += 1; 34 } 35 36 + void Lock_rotate_p2(Lock* lock, const char direction, const int distance) { 37 + int zeros_count = 0; 38 + 39 + if (direction == 'L') { 40 + zeros_count = distance / 100; 41 42 + if (lock->position > 0 && distance % 100 >= lock->position) 43 + zeros_count++; 44 + 45 + lock->position = circular_mod(lock->position - distance); 46 + } else { 47 + zeros_count = (distance + lock->position) / 100; 48 + lock->position = circular_mod(lock->position + distance); 49 + } 50 + 51 + lock->zero_count += zeros_count; 52 } 53 54 int main(int argc, char ** argv) { ··· 57 FILE *file = fopen(argv[1], "r"); 58 assert(file != NULL); 59 60 + Lock lock_1, lock_2; 61 + Lock_init(&lock_1); 62 + Lock_init(&lock_2); 63 64 static const int LINE_BUFFER = 6; 65 char line[LINE_BUFFER]; ··· 73 const int distance = atoi(line + 1); 74 75 assert(direction == 'L' || direction == 'R'); 76 + Lock_rotate(&lock_1, direction, distance); 77 + Lock_rotate_p2(&lock_2, direction, distance); 78 } 79 80 fclose(file); 81 + printf("Part 1: %d\n", lock_1.zero_count); 82 + printf("Part 2: %d\n", lock_2.zero_count); 83 }