diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-03-16 14:37:14 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-03-16 14:37:14 +0800 |
commit | c69f8f28285fd507aa27ae0a18b614f371a2ae1d (patch) | |
tree | 9f3da71d7e0395d9a8e7124ae82ccde7e47e5cff /src/2015/day5/aoc.cpp | |
parent | 6aa919cbe332d7e45c0c3a7954d48166f4b774c0 (diff) | |
download | advent-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.cpp | 27 |
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 |