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
|
changes++;
} else {
*destin = '@';
}
} else if (cc != 0) {
*destin = '.';
} else {
*destin = 0; // shouldn't happen
}
}
}
return changes;
}
void aoc202504(char *data, size_t len) {
(void)len; // unused argument
struct RectangularMap rm[2] = {0};
while (*data) {
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 and skip it
}
unsigned part1 = evolve(rm, 0); // evolve from rm[0] to rm[1]
unsigned part2 = part1, src = 1;
for (;;) {
unsigned tmp = evolve(rm, src); // keep evolving
if (tmp == 0) break; // STOP
src = 1 - src; // back and forth
part2 += tmp; // add changes in this round
}
printf("P1: %u; P2: %u\n", part1, part2);
RMfree(rm);
RMfree(rm + 1);
}
/* === aoc202503 =======================================================
|
|
|
|
|
|
|
|
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
|
changes++;
} else {
*destin = '@';
}
} else if (cc != 0) {
*destin = '.';
} else {
*destin = 0; // shouldn't happen, except beyond borders
}
}
}
return changes;
}
void aoc202504(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 = evolve(rm, 0); // evolve from rm[0] to rm[1]
unsigned part2 = part1, src = 1;
for (;;) {
unsigned tmp = evolve(rm, src); // keep evolving
if (tmp == 0) break; // STOP // back and forth
src = 1 - src; // between rm[1] and rm[0]
part2 += tmp; // add changes from this round
}
printf("P1: %u; P2: %u\n", part1, part2);
RMfree(rm);
RMfree(rm + 1);
}
/* === aoc202503 =======================================================
|