aboutsummaryrefslogtreecommitdiff
path: root/src/2021/day3/aoc.cpp
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-04-07 17:20:23 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-04-07 17:20:23 +0800
commit1335ce58eb9826e8c5a60cae8a9834083b8895a0 (patch)
tree99401685862714aaffe1c763628acb58c583d16a /src/2021/day3/aoc.cpp
parent6a5d6a498f1b6f43a72b638f1874b174a3e32bc1 (diff)
downloadadvent-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.cpp41
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