tangled
alpha
login
or
join now
shailpatels.me
/
advent_of_code_2025
0
fork
atom
this repo has no description
0
fork
atom
overview
issues
pulls
pipelines
day 1, part 2
shailpatels.me
3 months ago
99348cbb
beb8917a
+31
-13
1 changed file
expand all
collapse all
unified
split
1
main.c
+31
-13
1/main.c
···
1
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
8
-
int circular_mod(const int x);
7
7
+
int circular_mod(const int x) {
8
8
+
int result = x % 100;
9
9
+
if (result < 0) {
10
10
+
result += 100;
11
11
+
}
12
12
+
13
13
+
return result;
14
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
20
-
void Lock_rotate(Lock* lock, char direction, int distance) {
26
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
30
-
int circular_mod(const int x) {
31
31
-
int result = x % 100;
32
32
-
if (result < 0) {
33
33
-
result += 100;
34
34
-
}
36
36
+
void Lock_rotate_p2(Lock* lock, const char direction, const int distance) {
37
37
+
int zeros_count = 0;
38
38
+
39
39
+
if (direction == 'L') {
40
40
+
zeros_count = distance / 100;
35
41
36
36
-
return result;
42
42
+
if (lock->position > 0 && distance % 100 >= lock->position)
43
43
+
zeros_count++;
44
44
+
45
45
+
lock->position = circular_mod(lock->position - distance);
46
46
+
} else {
47
47
+
zeros_count = (distance + lock->position) / 100;
48
48
+
lock->position = circular_mod(lock->position + distance);
49
49
+
}
50
50
+
51
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
45
-
Lock lock;
46
46
-
Lock_init(&lock);
60
60
+
Lock lock_1, lock_2;
61
61
+
Lock_init(&lock_1);
62
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
60
-
Lock_rotate(&lock, direction, distance);
76
76
+
Lock_rotate(&lock_1, direction, distance);
77
77
+
Lock_rotate_p2(&lock_2, direction, distance);
61
78
}
62
79
63
80
fclose(file);
64
64
-
printf("Part 1: %d\n", lock.zero_count);
81
81
+
printf("Part 1: %d\n", lock_1.zero_count);
82
82
+
printf("Part 2: %d\n", lock_2.zero_count);
65
83
}