diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-04-07 20:58:02 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-04-07 20:58:02 +0800 |
commit | 0b12c5c0ebe57f12c35b53ede39674b5f08f2459 (patch) | |
tree | 37eee6bf40f6147a860a9e725d579d6cfc549893 /src/2021/day3/aoc.cpp | |
parent | 59bcc4cb9d065734b532958bbd64f36159ca7a43 (diff) | |
download | advent-of-code-0b12c5c0ebe57f12c35b53ede39674b5f08f2459.tar.gz advent-of-code-0b12c5c0ebe57f12c35b53ede39674b5f08f2459.zip |
2021 day3 optim
Diffstat (limited to 'src/2021/day3/aoc.cpp')
-rw-r--r-- | src/2021/day3/aoc.cpp | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/2021/day3/aoc.cpp b/src/2021/day3/aoc.cpp index fde8a2b..3a73ba7 100644 --- a/src/2021/day3/aoc.cpp +++ b/src/2021/day3/aoc.cpp @@ -26,31 +26,27 @@ std::vector<line_view> filter(const std::vector<line_view>& vs, int i, char c) { return n; } -char most_common(std::vector<line_view>& v, int i, char x) { - size_t t0{0}; - size_t t1{0}; +void count(const std::vector<line_view>& v, int i, size_t* t0, size_t* t1) { for (auto& l : v) { if (*(l.line + i) == '1') { - t1++; - } - else { - t0++; + (*t1)++; + } else { + (*t0)++; } } +} + +char most_common(const std::vector<line_view>& v, int i, char x) { + size_t t0{0}; + size_t t1{0}; + count(v, i, &t0, &t1); return t1 > t0 ? '1' : (t1 < t0 ? '0' : x); } char least_common(std::vector<line_view>& v, int i, char x) { size_t t0{0}; size_t t1{0}; - for (auto& l : v) { - if (*(l.line + i) == '1') { - t1++; - } - else { - t0++; - } - } + count(v, i, &t0, &t1); return t1 > t0 ? '0' : (t1 < t0 ? '1' : x); } |