advent2025

Advent of Code 2025 Solutions
git clone git://bsandro.tech/advent2025
Log | Files | Refs | LICENSE

commit e039945a21007f5b26abacb8d08484453121fcc8
parent f9e0572f8dac8018300e00fa159888c71d8390bc
Author: bsandro <brian.drosan@gmail.com>
Date:   Tue,  9 Dec 2025 00:01:31 +0200

day08 p2 doesn't work yet

Diffstat:
Mday08.c | 51+++++++++++++++++++++++++++++++++++++++------------
1 file changed, 39 insertions(+), 12 deletions(-)

diff --git a/day08.c b/day08.c @@ -138,7 +138,7 @@ int main(void) { uint64_t part2 = 0; Point *points = calloc(POINTS, sizeof(Point)); printf("malloc ok\n"); - int pointsl = 0; + int points_l = 0; int *n = points[0].n; int buf[16] = {0}; int bufl = 0; @@ -148,27 +148,34 @@ int main(void) { *n = btoi(bufl, buf); bufl = 0; n++; - if (c=='\n') n = points[++pointsl].n; + if (c=='\n') n = points[++points_l].n; } } - printf("%d points\n", pointsl); - Distance *dists = calloc((POINTS*POINTS-POINTS)/2, sizeof(Distance)); - printf("%d dists\n", (POINTS*POINTS-POINTS)/2); - int dicts_l = 0; + printf("%d points\n", points_l); + const int dists_cnt = (POINTS*POINTS-POINTS)/2; + Distance *dists = calloc(dists_cnt, sizeof(Distance)); + printf("%d dists\n", dists_cnt); + int dists_l = 0; for (size_t i1=0;i1<POINTS;++i1) { for (size_t i2=0;i2<POINTS;++i2) { if (i1==i2) continue; Point *p1 = &points[i1]; Point *p2 = &points[i2]; int d = dist(points[i1], points[i2]); - if (!has_points(dicts_l, dists, p1, p2)) { - dists[dicts_l++] = (Distance){ p1, p2, d }; + if (!has_points(dists_l, dists, p1, p2)) { + dists[dists_l++] = (Distance){ p1, p2, d }; } } } - printf("%d dists real\n", dicts_l); - qsort(dists, dicts_l, sizeof(Distance), cmp_dist); - for (int i=0;i<11;++i) printf("%3d -> %3d (%3d)\n", dists[i].p1->x, dists[i].p2->x, dists[i].d); + printf("%d dists real\n", dists_l); + qsort(dists, dists_l, sizeof(Distance), cmp_dist); + /*for (int i=0;i<dists_l;++i) { + printf("%3d -> %3d (%3d)\n", dists[i].p1->x, dists[i].p2->x, dists[i].d); + if (dists[i].p1->x==216 && dists[i].p2->x==117) { + printf("fin\n"); + break; + } + }*/ Circuit *circuits = calloc(CONNS*2, sizeof(Circuit)); int circuits_l = 0; printf("Circuits: %zu/%zu\n", sizeof(circuits), sizeof(Circuit)); @@ -183,7 +190,7 @@ int main(void) { } int len_prev = circuits_l; while (1) { - printf("\nMERGE %d circuits\n", circuits_l); + //printf("\nMERGE %d circuits\n", circuits_l); circuits_l = circuits_merge(circuits_l, circuits); if (circuits_l==len_prev) break; len_prev = circuits_l; @@ -199,6 +206,26 @@ int main(void) { points_print(circuits[i].points_l, circuits[i].points); } part1 = circuits[0].points_l*circuits[1].points_l*circuits[2].points_l; + // ------------------------------------ + free(circuits); + circuits = calloc(dists_l, sizeof(Circuit)); + circuits_l = 0; + for (int i=0;i<dists_l;++i) { + circuits_add(&circuits_l, circuits, &dists[i]); + int len_prev = circuits_l; + while (1) { + circuits_l = circuits_merge(circuits_l, circuits); + if (circuits_l==len_prev) break; + else len_prev = circuits_l; + } + if (circuits[0].points_l==points_l) { + printf("final dist: %d -> %d\n", dists[i].p1->x, dists[i].p2->x); + part2 = dists[i].p1->x * dists[i].p2->x; + break; + } + } + printf("final circuits_l: %d (%d)\n", circuits_l, circuits[0].points_l); printf("p1: %"PRIu64"\np2: %"PRIu64"\n", part1, part2); return 0; } +// p2 8168085134 too low