aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2024/src/day05.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/2024/src/day05.cpp b/2024/src/day05.cpp
index 37d74c6..3ace14d 100644
--- a/2024/src/day05.cpp
+++ b/2024/src/day05.cpp
@@ -40,6 +40,7 @@ read_file(string_view filename)
40 for ( string line; getline(input, line); ) { 40 for ( string line; getline(input, line); ) {
41 pages.emplace_back(split(line)); 41 pages.emplace_back(split(line));
42 } 42 }
43
43 return { rules, pages }; 44 return { rules, pages };
44} 45}
45 46
@@ -56,10 +57,10 @@ is_valid(const vector<tuple<long, long>>& rules, const vector<long>& page)
56 return get<0>(rule) == num; 57 return get<0>(rule) == num;
57 }; 58 };
58 59
59 for ( auto it = find_if(rules.begin(), rules.end(), pred); it != rules.end(); it = find_if(it + 1, rules.end(), pred) ) { 60 for ( auto it = find_if(rules.begin(), rules.end(), pred);
60 const auto foo = get<1>(*it); 61 it != rules.end();
61 62 it = find_if(it + 1, rules.end(), pred) ) {
62 if ( processed.contains(foo) ) { 63 if ( processed.contains(get<1>(*it)) ) {
63 invalid = true; 64 invalid = true;
64 } 65 }
65 } 66 }
@@ -84,13 +85,15 @@ part2(const vector<tuple<long, long>>& rules, const vector<vector<long>>& pages)
84{ 85{
85 long sum = 0; 86 long sum = 0;
86 for ( auto page: pages ) { 87 for ( auto page: pages ) {
87 if ( !is_valid(rules, page) ) { 88 if ( is_valid(rules, page) ) {
88 ranges::sort(page, [&](auto lhs, auto rhs) -> bool { 89 continue;
89 return ranges::find(rules, make_tuple(lhs, rhs)) != rules.end();
90 });
91
92 sum += page.at(page.size() / 2);
93 } 90 }
91
92 ranges::sort(page, [&rules](auto lhs, auto rhs) {
93 return ranges::find(rules, make_tuple(lhs, rhs)) != rules.end();
94 });
95
96 sum += page.at(page.size() / 2);
94 } 97 }
95 cout << sum << endl; 98 cout << sum << endl;
96} 99}