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
-
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);
0
0
0
0
0
0
0
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;
0
0
0
0
0
0
0
0
0
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);
0
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);
0
61
}
62
63
fclose(file);
64
-
printf("Part 1: %d\n", lock.zero_count);
0
65
}
···
0
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
}