aboutsummaryrefslogtreecommitdiff
path: root/src/2015/day5/aoc.cpp
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-03-16 14:37:14 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-03-16 14:37:14 +0800
commitc69f8f28285fd507aa27ae0a18b614f371a2ae1d (patch)
tree9f3da71d7e0395d9a8e7124ae82ccde7e47e5cff /src/2015/day5/aoc.cpp
parent6aa919cbe332d7e45c0c3a7954d48166f4b774c0 (diff)
downloadadvent-of-code-c69f8f28285fd507aa27ae0a18b614f371a2ae1d.tar.gz
advent-of-code-c69f8f28285fd507aa27ae0a18b614f371a2ae1d.zip
day5 part1
Diffstat (limited to 'src/2015/day5/aoc.cpp')
-rw-r--r--src/2015/day5/aoc.cpp27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/2015/day5/aoc.cpp b/src/2015/day5/aoc.cpp
index d3f310b..aa0213f 100644
--- a/src/2015/day5/aoc.cpp
+++ b/src/2015/day5/aoc.cpp
@@ -15,7 +15,7 @@ int count_vowels(line_view lv, const char* vowels) {
bool is_nice(line_view lv, int repeated) {
const char* p = lv.line;
- while (p + repeated < lv.line + lv.length) {
+ while (p + repeated <= lv.line + lv.length) {
if (is_repeated(p, p + repeated)) {
return true;
} else {
@@ -25,16 +25,23 @@ bool is_nice(line_view lv, int repeated) {
return false;
}
-bool is_nice(line_view lv, const char* disallowed[]) {
- size_t size = sizeof(disallowed) / sizeof(*disallowed);
- if (std::any_of(disallowed, disallowed + size, [&lv](const char* s) -> bool { return lv.contains(s); })) {
- return false;
- }
- return true;
+bool is_nice(line_view lv, const char* disallowed[], size_t size) {
+ return not std::any_of(disallowed, disallowed + size, [&lv](const char* s) -> bool { return lv.contains(s); });
}
-/*
-int day5(line_view) {}
-*/
+int day5(line_view file) {
+ int total = 0;
+ const char* subs[] = {"ab", "cd", "pq", "xy"};
+ per_line(file, [&subs, &total](line_view lv) {
+ auto b1 = count_vowels(lv, "aeiou") >= 3;
+ auto b2 = is_nice(lv, 2);
+ auto b3 = is_nice(lv, subs, ARRAY_SIZE(subs));
+ if (b1 && b2 && b3) {
+ total += 1;
+ }
+ return true;
+ });
+ return total;
+}
} // namespace aoc2015