diff options
| author | Thomas Schmucker <ts@its1.de> | 2025-12-02 22:24:16 +0100 |
|---|---|---|
| committer | Thomas Schmucker <ts@its1.de> | 2025-12-02 22:24:16 +0100 |
| commit | 32914de7c6aba10963ada32ba6fdfeb47063b4c3 (patch) | |
| tree | fdc71324200e89c56ee36726237df618546ec486 /2025/src | |
| parent | a6c923706a0447e65c3b0b2644727367494d3947 (diff) | |
| download | advent-of-code-32914de7c6aba10963ada32ba6fdfeb47063b4c3.tar.gz advent-of-code-32914de7c6aba10963ada32ba6fdfeb47063b4c3.tar.bz2 advent-of-code-32914de7c6aba10963ada32ba6fdfeb47063b4c3.zip | |
aoc 2025, day 2, additional solutions :)
Diffstat (limited to '2025/src')
| -rw-r--r-- | 2025/src/day02.cpp | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/2025/src/day02.cpp b/2025/src/day02.cpp index 1d17cd9..f19f386 100644 --- a/2025/src/day02.cpp +++ b/2025/src/day02.cpp | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | #include <filesystem> | 1 | #include <filesystem> |
| 2 | #include <fstream> | 2 | #include <fstream> |
| 3 | #include <iostream> | 3 | #include <iostream> |
| 4 | #include <ranges> | 4 | #include <regex> |
| 5 | #include <sstream> | 5 | #include <sstream> |
| 6 | #include <string> | 6 | #include <string> |
| 7 | #include <vector> | 7 | #include <vector> |
| @@ -77,6 +77,18 @@ part1(const vector<tuple<long, long>>& ranges) | |||
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | void | 79 | void |
| 80 | part1_regex(const vector<tuple<long, long>>& ranges) | ||
| 81 | { | ||
| 82 | const regex regex{ R"(^(\d+)\1$)" }; | ||
| 83 | |||
| 84 | auto is_invalid = [&](long num) { | ||
| 85 | return regex_search(to_string(num), regex); | ||
| 86 | }; | ||
| 87 | |||
| 88 | cout << "Part 1 (regex): " << accumulate_invalids(ranges, is_invalid) << '\n'; | ||
| 89 | } | ||
| 90 | |||
| 91 | void | ||
| 80 | part2(const vector<tuple<long, long>>& ranges) | 92 | part2(const vector<tuple<long, long>>& ranges) |
| 81 | { | 93 | { |
| 82 | auto is_invalid = [](long num) { | 94 | auto is_invalid = [](long num) { |
| @@ -104,12 +116,40 @@ part2(const vector<tuple<long, long>>& ranges) | |||
| 104 | cout << "Part 2: " << accumulate_invalids(ranges, is_invalid) << '\n'; | 116 | cout << "Part 2: " << accumulate_invalids(ranges, is_invalid) << '\n'; |
| 105 | } | 117 | } |
| 106 | 118 | ||
| 119 | void | ||
| 120 | part2_regex(const vector<tuple<long, long>>& ranges) | ||
| 121 | { | ||
| 122 | const regex regex{ R"(^(\d+)\1+$)" }; | ||
| 123 | |||
| 124 | auto is_invalid = [&](long num) { | ||
| 125 | return regex_search(to_string(num), regex); | ||
| 126 | }; | ||
| 127 | |||
| 128 | cout << "Part 2 (regex): " << accumulate_invalids(ranges, is_invalid) << '\n'; | ||
| 129 | } | ||
| 130 | |||
| 131 | void | ||
| 132 | part2_kmp(const vector<tuple<long, long>>& ranges) | ||
| 133 | { | ||
| 134 | auto is_invalid = [](long num) { | ||
| 135 | const auto str = to_string(num); | ||
| 136 | return (str + str).find(str, 1) < str.size(); | ||
| 137 | }; | ||
| 138 | |||
| 139 | cout << "Part 2 (kmp): " << accumulate_invalids(ranges, is_invalid) << '\n'; | ||
| 140 | } | ||
| 141 | |||
| 107 | } // namespace | 142 | } // namespace |
| 108 | 143 | ||
| 109 | int | 144 | int |
| 110 | main() | 145 | main() |
| 111 | { | 146 | { |
| 112 | auto ranges = read_file("data/day02.txt"); | 147 | auto ranges = read_file("data/day02.txt"); |
| 148 | |||
| 113 | part1(ranges); | 149 | part1(ranges); |
| 150 | part1_regex(ranges); | ||
| 151 | |||
| 114 | part2(ranges); | 152 | part2(ranges); |
| 153 | part2_regex(ranges); | ||
| 154 | part2_kmp(ranges); | ||
| 115 | } | 155 | } |
