diff options
Diffstat (limited to '2024/src/day05.cpp')
| -rw-r--r-- | 2024/src/day05.cpp | 23 |
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 | } |
