-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadventofcodeday4.c
More file actions
79 lines (73 loc) · 1.91 KB
/
adventofcodeday4.c
File metadata and controls
79 lines (73 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char *lines[3];
int sum;
} forklifts_management;
void init(forklifts_management *forklifts) {
forklifts->sum = 0;
forklifts->lines[0] = malloc(500);
forklifts->lines[1] = malloc(500);
forklifts->lines[2] = malloc(500);
}
void shift_lines(forklifts_management *forklifts) {
memset(forklifts->lines[0], '\0', 500);
memcpy(forklifts->lines[0], forklifts->lines[1], 500);
memset(forklifts->lines[1], '\0', 500);
memcpy(forklifts->lines[1], forklifts->lines[2], 500);
memset(forklifts->lines[2], '\0', 500);
}
int sum_paper(forklifts_management *forklifts, int i) {
int sum = 0;
if (i != 0) {
if (forklifts->lines[0][i - 1] == 64) {
sum++;
}
if (forklifts->lines[1][i - 1] == 64) {
sum++;
}
if (forklifts->lines[2][i - 1] == 64) {
sum++;
}
}
if (forklifts->lines[0][i] == 64) {
sum++;
}
if (forklifts->lines[2][i] == 64) {
sum++;
}
if (i != strlen(forklifts->lines[1]) - 1) {
if (forklifts->lines[0][i + 1] == 64) {
sum++;
}
if (forklifts->lines[1][i + 1] == 64) {
sum++;
}
if (forklifts->lines[2][i + 1] == 64) {
sum++;
}
}
return sum < 4;
}
void count_paper(forklifts_management *forklifts) {
for (int i = 0; i < strlen(forklifts->lines[1]); i++) {
if (forklifts->lines[1][i] == 64) {
forklifts->sum += sum_paper(forklifts, i);
}
}
}
int main(void) {
forklifts_management *forklifts = malloc(sizeof(forklifts_management));
init(forklifts);
FILE *file = fopen("input", "r");
fscanf(file, "%s", forklifts->lines[2]);
do {
shift_lines(forklifts);
fscanf(file, "%s", forklifts->lines[2]);
count_paper(forklifts);
} while ((forklifts->lines[0][0] != '\0') + (forklifts->lines[1][0] != '\0') +
(forklifts->lines[2][0] != '\0') >
1);
printf("Sum is: %d\n", forklifts->sum);
}