commit bce08140c1fe98bd14e4d19f67b4785b27da8e87
parent 696c97dfbc0044eae886826da74fb6176b3364e0
Author: bsandro <email@bsandro.tech>
Date: Tue, 9 Dec 2025 00:42:07 +0200
day08 works with test and real inputs without recompiling
Diffstat:
| M | day08.c | | | 22 | ++++++++++++---------- |
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/day08.c b/day08.c
@@ -118,15 +118,12 @@ static int circuits_merge(int circuits_l, Circuit *circuits) {
return new_len;
}
-#define POINTS 1000
-#define CONNS 1000
-//#define POINTS 20
-//b#define CONNS 10
+#define MAX_POINTS 1000
int main(void) {
uint64_t part1 = 0;
uint64_t part2 = 0;
- Point *points = calloc(POINTS, sizeof(Point));
+ Point *points = calloc(MAX_POINTS, sizeof(Point));
int points_l = 0;
int *n = points[0].n;
int buf[16] = {0};
@@ -139,12 +136,17 @@ int main(void) {
n++;
if (c=='\n') n = points[++points_l].n;
}
+ if (points_l>MAX_POINTS) {
+ printf("Too many input points, max: %d\n", MAX_POINTS);
+ return 1;
+ }
}
- const int dists_cnt = (POINTS*POINTS-POINTS)/2;
+ const int dists_cnt = (points_l*points_l-points_l)/2;
+ const int conns_cnt = dists_cnt<1000 ? 10 : 1000;
Distance *dists = calloc(dists_cnt, sizeof(Distance));
int dists_l = 0;
- for (size_t i1=0;i1<POINTS;++i1) {
- for (size_t i2=0;i2<POINTS;++i2) {
+ for (int i1=0;i1<points_l;++i1) {
+ for (int i2=0;i2<points_l;++i2) {
if (i1==i2) continue;
Point *p1 = &points[i1];
Point *p2 = &points[i2];
@@ -155,9 +157,9 @@ int main(void) {
}
}
qsort(dists, dists_l, sizeof(Distance), cmp_dist);
- Circuit *circuits = calloc(CONNS*2, sizeof(Circuit));
+ Circuit *circuits = calloc(conns_cnt*2, sizeof(Circuit));
int circuits_l = 0;
- for (int i=0;i<CONNS;++i) {
+ for (int i=0;i<conns_cnt;++i) {
circuits_add(&circuits_l, circuits, &dists[i]);
circuits_l = circuits_merge(circuits_l, circuits);
}