diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-04-07 17:20:23 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-04-07 17:20:23 +0800 |
commit | 1335ce58eb9826e8c5a60cae8a9834083b8895a0 (patch) | |
tree | 99401685862714aaffe1c763628acb58c583d16a /src/2021/day3/aoc.cpp | |
parent | 6a5d6a498f1b6f43a72b638f1874b174a3e32bc1 (diff) | |
download | advent-of-code-1335ce58eb9826e8c5a60cae8a9834083b8895a0.tar.gz advent-of-code-1335ce58eb9826e8c5a60cae8a9834083b8895a0.zip |
2021 day3 part1
Diffstat (limited to 'src/2021/day3/aoc.cpp')
-rw-r--r-- | src/2021/day3/aoc.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/2021/day3/aoc.cpp b/src/2021/day3/aoc.cpp index 7a3c895..dc3d349 100644 --- a/src/2021/day3/aoc.cpp +++ b/src/2021/day3/aoc.cpp @@ -2,4 +2,45 @@ namespace aoc2021 { +int decimal(const char* p) { + int d{0}; + while (*p == '0' || *p == '1') { + d = 2 * d + *p - '0'; + p++; + } + return d; } + +int day3(line_view file) { + char gamma[13] = {0}; + char epsilon[13] = {0}; + + int is[12] = {0}; + int total{0}; + per_line(file, [&is, &total](line_view lv) { + for (int i = 0; i < 12; i++) { + if (*(lv.line + i) == '1') { + is[i] += 1; + } + } + total += 1; + return true; + }); + + for (int i = 0; i < 12; i++) { + if (is[i] > total / 2) { + gamma[i] = '1'; + epsilon[i] = '0'; + } else { + gamma[i] = '0'; + epsilon[i] = '1'; + } + } + + // printf("%s\n", gamma); + // printf("%s\n", epsilon); + + return decimal(gamma) * decimal(epsilon); +} + +} // namespace aoc2021 |