aboutsummaryrefslogtreecommitdiff
path: root/2025/src
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2025-12-02 22:24:16 +0100
committerThomas Schmucker <ts@its1.de>2025-12-02 22:24:16 +0100
commit32914de7c6aba10963ada32ba6fdfeb47063b4c3 (patch)
treefdc71324200e89c56ee36726237df618546ec486 /2025/src
parenta6c923706a0447e65c3b0b2644727367494d3947 (diff)
downloadadvent-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.cpp42
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
79void 79void
80part1_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
91void
80part2(const vector<tuple<long, long>>& ranges) 92part2(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
119void
120part2_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
131void
132part2_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
109int 144int
110main() 145main()
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}