11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
/* === aocYYYYDD =======================================================
===================================================================== */
void aocYYYYDD(char *data, size_t len) {
(void)len; // unused argument
}
#endif
/* === aoc202507 =======================================================
===================================================================== */
static unsigned tachyon_splits(struct RectangularMap *rm) {
unsigned count = 0;
for (int row = 0; row < rm->rows; row++) {
for (int col = 0; col < rm->cols; col++) {
char cc = RMcharat(rm, col, row);
if ((cc == 'S') || (cc == '|')) {
char *pc = RMcharptr(rm, col, row+1);
if (pc == NULL) continue;
if (*pc == '.') {
*pc = '|';
} else if (*pc == '^') {
*(pc - 1) = *(pc + 1) = '|';
count++;
} else if (*pc == '|') {
/* do nothing */
} else {
/* do nothing */
}
}
}
}
return count;
}
void aoc202507(char *data, size_t len) {
(void)len; // unused argument
struct RectangularMap rm[2] = {0};
while (*data) { // copy from data to rms
char *data2 = data;
while (*data != '\n') data++;
*data = 0; // erase newline
RMaddline(rm + 0, data2);
RMaddline(rm + 1, data2); // set both rm's to the same thing
*data++ = '\n'; // unerase newline (obviously!) and skip it
}
unsigned part1 = tachyon_splits(rm);
printf("P1: %u\n", part1);
RMfree(rm);
RMfree(rm + 1);
}
/* === aoc202506 =======================================================
===================================================================== */
static long long unsigned add2506(long long unsigned v[4][1024], int lin, int col) {
long long unsigned sum = 0;
for (int k = 0; k < lin; k++) sum += v[k][col];
return sum;
|