aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2025/src/day05.cpp34
1 files changed, 31 insertions, 3 deletions
diff --git a/2025/src/day05.cpp b/2025/src/day05.cpp
index 2322948..ee565a3 100644
--- a/2025/src/day05.cpp
+++ b/2025/src/day05.cpp
@@ -26,10 +26,10 @@ read_file(const filesystem::path& filename)
26 26
27 for ( string line; getline(file, line); ) { 27 for ( string line; getline(file, line); ) {
28 smatch match; 28 smatch match;
29 if ( regex_search(line, match, range) ) { 29 if ( regex_match(line, match, range) ) {
30 ranges.emplace_back(stol(match[1]), stol(match[2])); 30 ranges.emplace_back(stol(match[1]), stol(match[2]));
31 } 31 }
32 else if ( regex_search(line, match, single) ) { 32 else if ( regex_match(line, match, single) ) {
33 numbers.emplace_back(stol(match[1])); 33 numbers.emplace_back(stol(match[1]));
34 } 34 }
35 } 35 }
@@ -43,7 +43,7 @@ part1(const Ranges& ranges, const vector<long>& numbers)
43 long count = 0; 43 long count = 0;
44 for ( const auto number: numbers ) { 44 for ( const auto number: numbers ) {
45 for ( const auto [start, end]: ranges ) { 45 for ( const auto [start, end]: ranges ) {
46 if ( number >= start && number <= end ) { 46 if ( start <= number && number <= end ) {
47 ++count; 47 ++count;
48 break; 48 break;
49 } 49 }
@@ -52,6 +52,33 @@ part1(const Ranges& ranges, const vector<long>& numbers)
52 cout << "Part 1: " << count << '\n'; 52 cout << "Part 1: " << count << '\n';
53} 53}
54 54
55void
56part2(Ranges ranges)
57{
58 ranges::sort(ranges);
59
60 Ranges merged;
61 merged.emplace_back(ranges[0]);
62
63 for ( size_t i = 1; i < ranges.size(); ++i ) {
64 auto& [last_start, last_end] = merged.back();
65 auto& [curr_start, curr_end] = ranges[i];
66
67 if ( last_end < curr_start ) {
68 merged.emplace_back(ranges[i]);
69 }
70 else if ( last_end < curr_end ) {
71 last_end = curr_end;
72 }
73 }
74
75 long count = 0;
76 for ( const auto [start, end]: merged ) {
77 count += end - start + 1;
78 }
79 cout << "Part 2: " << count << '\n';
80}
81
55} // namespace 82} // namespace
56 83
57int 84int
@@ -59,4 +86,5 @@ main()
59{ 86{
60 const auto [ranges, numbers] = read_file("data/day05.txt"); 87 const auto [ranges, numbers] = read_file("data/day05.txt");
61 part1(ranges, numbers); 88 part1(ranges, numbers);
89 part2(ranges);
62} 90}