aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/2019/day8/aoc.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/2019/day8/aoc.cpp b/src/2019/day8/aoc.cpp
index c92a054..9109dd1 100644
--- a/src/2019/day8/aoc.cpp
+++ b/src/2019/day8/aoc.cpp
@@ -7,20 +7,40 @@ struct digits {
int chars[10] = {0};
};
-static void count_digit(const char* p1, const char* p2, digits* p) {
+struct layer {
+ char ds[25 * 6] = {0};
+};
+
+//static void print(layer * l){
+// for(size_t i = 0; i < ARRAY_SIZE(l->ds); i++) {
+// printf("%s", l->ds[i] > 0 ? "#" : ".");
+// if ((i + 1) % 25 == 0) {
+// printf("\n");
+// }
+// }
+//}
+
+static void fold_layers(const char* p1, const char* p2, digits* p, layer* l) {
+ int index{0};
+ auto reset = [](char x, char y) { return y == 0 || y == 1 ? y : x; };
+
while (p1 < p2) {
p->chars[*p1 - '0'] += 1;
+ l->ds[index] = reset(*p1 - '0', l->ds[index]);
p1++;
+ index++;
}
}
std::pair<int, int> day8(line_view file) {
digits ds[100];
int x = 6 * 25;
+ layer top;
+ memset(&top, 2, sizeof(layer));
for (int i = 0; i < 100; i++) {
const char* p1 = file.line + i * x;
const char* p2 = file.line + (i + 1) * x;
- count_digit(p1, p2, &ds[i]);
+ fold_layers(p1, p2, &ds[i], &top);
}
struct ct {
@@ -31,13 +51,10 @@ std::pair<int, int> day8(line_view file) {
for (int i = 0; i < 100; i++) {
cs[i].zeros = ds[i].chars[0];
cs[i].times = ds[i].chars[1] * ds[i].chars[2];
- // for (int j : {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}) {
- // printf("%d ", ds[i].chars[j]);
- // }
- // printf("\n");
}
std::sort(cs, cs + 100, [](ct c1, ct c2) { return c1.zeros < c2.zeros; });
+ // print(&top);
return {cs[0].times, 0};
}
} // namespace aoc2019