aoc

Thing1's 2025 aoc
Log | Files | Refs

5b.c (878B)


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 
      5 typedef struct range {
      6 	long long int lower, upper;
      7 } range;
      8 
      9 range ranges[1024];
     10 int rangecount = 0;
     11 
     12 void
     13 loadranges(FILE *f) {
     14 	char line[64] = {0};
     15 	while (fgets(line, 64, f) && line[0] != '\n') {
     16 		ranges[rangecount].lower = atoll(line);
     17 		ranges[rangecount].upper = atoll(strchr(line, '-') + 1);
     18 		rangecount++;
     19 	}
     20 }
     21 
     22 int
     23 hasappeared(long long int id, range *end) {
     24 	range *r;
     25 	for (r = ranges; r != end; r = &r[1]) {
     26 		if (id <= r->upper && id >= r->lower)
     27 			goto seen;
     28 	}
     29 	return 0;
     30 seen:
     31 	return 1;
     32 }
     33 
     34 int
     35 main() {
     36 	long long int total = 0, start;
     37 	int i;
     38 	loadranges(stdin);
     39 
     40 	for (i = 0; i < rangecount; i++) {
     41 		for (start = ranges[i].lower; start <= ranges[i].upper; start++) {
     42 			if (!hasappeared(start, &ranges[i])) {
     43 				total++;
     44 				//printf("new valid id\n");
     45 			}
     46 		}
     47 	}
     48 	printf("%lld\n", total);
     49 }