aboutsummaryrefslogtreecommitdiff
path: root/2015/src/day05.cpp
diff options
context:
space:
mode:
Diffstat (limited to '2015/src/day05.cpp')
-rw-r--r--2015/src/day05.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/2015/src/day05.cpp b/2015/src/day05.cpp
new file mode 100644
index 0000000..b88ecf5
--- /dev/null
+++ b/2015/src/day05.cpp
@@ -0,0 +1,56 @@
1#include <algorithm>
2#include <fstream>
3#include <iostream>
4#include <regex>
5#include <string>
6#include <vector>
7
8using namespace std;
9
10auto
11read_file(string_view filename)
12{
13 fstream input{ filename };
14 vector<string> lines;
15
16 for ( string line; getline(input, line); ) {
17 lines.emplace_back(line);
18 }
19
20 return lines;
21}
22
23void
24part1(const vector<string>& lines)
25{
26 const regex re1("(.*[aeiou]){3}");
27 const regex re2("(.)\\1");
28 const regex re3("(ab|cd|pq|xy)");
29
30 auto count = count_if(begin(lines), end(lines), [&](auto line) {
31 return regex_search(line, re1) && regex_search(line, re2) && !regex_search(line, re3);
32 });
33
34 cout << count << endl;
35}
36
37void
38part2(const vector<string>& lines)
39{
40 const regex re1("(..).*\\1");
41 const regex re2("(.).\\1");
42
43 auto count = count_if(begin(lines), end(lines), [&](auto line) {
44 return regex_search(line, re1) && regex_search(line, re2);
45 });
46
47 cout << count << endl;
48}
49
50int
51main()
52{
53 auto puzzle = read_file("data/day05.txt");
54 part1(puzzle);
55 part2(puzzle);
56}