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