1
0
advent-of-code-2025/day05.c
2025-12-12 11:29:07 +01:00

93 lines
1.9 KiB
C

#include <limits.h>
#include <stdint.h>
#define RT_CORE_IMPLEMENTATION
#include "rtcore.h"
#include "aoc.h"
typedef struct
{
i64 first;
i64 last;
} range;
int sort_range(range *a, range *b)
{
return a->first <= b->first ? -1 : 1;
}
int
main(int argc, char **argv)
{
arena arena = CreateArena();
dataset ds = ParseDatasetOption(argc, argv);
s8 input = {0};
if (ds == DS_FULL)
input = ReadEntireFileS8(S8("inputs/day05_full"), &arena);
else if (ds == DS_DEMO)
input = ReadEntireFileS8(S8("inputs/day05_demo"), &arena);
if (!input.data)
return 1;
range *ranges = (range *)arena.begin;
isize range_count = 0;
split_result line = S8Split(S8Trim(input), '\n');
while (line.first.data)
{
if (line.first.length == 0)
{
break;
}
split_result split = S8Split(S8Trim(line.first), '-');
s8_parse_i64_result parsed_first = S8ParseI64(split.first, 10);
if (!parsed_first.ok)
return 1;
s8_parse_i64_result parsed_second = S8ParseI64(split.second, 10);
if (!parsed_second.ok)
return 1;
i64 first = parsed_first.i;
i64 last = parsed_second.i;
ranges[range_count].first = first;
ranges[range_count].last = last;
++range_count;
line = S8Split(line.second, '\n');
}
line = S8Split(line.second, '\n');
i32 fresh_count = 0;
while (line.first.data)
{
s8_parse_i64_result id_ = S8ParseI64(line.first, 10);
if (!id_.ok)
return 1;
i64 id = id_.i;
for (isize i = 0; i < range_count; ++i)
{
if (id >= ranges[i].first && id <= ranges[i].last)
{
++fresh_count;
break;
}
}
line = S8Split(line.second, '\n');
}
printf("Answer: %d\n", fresh_count);
qsort(ranges, range_count, sizeof(range), (__compar_fn_t)sort_range);
/* Part two */
for (isize i = 0; i < range_count; ++i)
{
printf("%ld-%ld\n", ranges[i].first, ranges[i].last);
}
return 0;
}