From 32914de7c6aba10963ada32ba6fdfeb47063b4c3 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Tue, 2 Dec 2025 22:24:16 +0100 Subject: aoc 2025, day 2, additional solutions :) --- 2025/src/day02.cpp | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to '2025') 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 @@ #include #include #include -#include +#include #include #include #include @@ -76,6 +76,18 @@ part1(const vector>& ranges) cout << "Part 1: " << accumulate_invalids(ranges, is_invalid) << '\n'; } +void +part1_regex(const vector>& ranges) +{ + const regex regex{ R"(^(\d+)\1$)" }; + + auto is_invalid = [&](long num) { + return regex_search(to_string(num), regex); + }; + + cout << "Part 1 (regex): " << accumulate_invalids(ranges, is_invalid) << '\n'; +} + void part2(const vector>& ranges) { @@ -104,12 +116,40 @@ part2(const vector>& ranges) cout << "Part 2: " << accumulate_invalids(ranges, is_invalid) << '\n'; } +void +part2_regex(const vector>& ranges) +{ + const regex regex{ R"(^(\d+)\1+$)" }; + + auto is_invalid = [&](long num) { + return regex_search(to_string(num), regex); + }; + + cout << "Part 2 (regex): " << accumulate_invalids(ranges, is_invalid) << '\n'; +} + +void +part2_kmp(const vector>& ranges) +{ + auto is_invalid = [](long num) { + const auto str = to_string(num); + return (str + str).find(str, 1) < str.size(); + }; + + cout << "Part 2 (kmp): " << accumulate_invalids(ranges, is_invalid) << '\n'; +} + } // namespace int main() { auto ranges = read_file("data/day02.txt"); + part1(ranges); + part1_regex(ranges); + part2(ranges); + part2_regex(ranges); + part2_kmp(ranges); } -- cgit v1.3