improve by only searching halfway
[advent21.git] / 07b.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <limits.h>
5
6 int main()
7 {
8 char *buf = NULL;
9 size_t len = 0;
10 int crabs[1000] = {0};
11 int ncrabs = 0;
12 int maxp = 0;
13 int minp = INT_MAX;
14
15 getline(&buf, &len, stdin);
16 char *p = strtok(buf, ",");
17 crabs[ncrabs] = atoi(p);
18 maxp = crabs[ncrabs];
19 minp = crabs[ncrabs++];
20 while ((p = strtok(NULL, ",")) != NULL) {
21 crabs[ncrabs] = atoi(p);
22 maxp = maxp < crabs[ncrabs] ? crabs[ncrabs] : maxp;
23 minp = minp > crabs[ncrabs] ? crabs[ncrabs] : minp;
24 ncrabs++;
25 }
26
27 int lastdist = INT_MAX;
28 int dist = INT_MAX;
29 int i = minp;
30 do {
31 lastdist = dist;
32 dist = 0;
33 for (int j = 0; j<ncrabs; j++) {
34 int d = abs(crabs[j]-i);
35 for (int k = 1; k<=d; k++)
36 dist += k;
37 }
38 i++;
39 } while (dist < lastdist);
40 printf("%d\n", lastdist);
41 }