aboutsummaryrefslogtreecommitdiff
path: root/src/2022/day18/aoc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/2022/day18/aoc.cpp')
-rw-r--r--src/2022/day18/aoc.cpp49
1 files changed, 47 insertions, 2 deletions
diff --git a/src/2022/day18/aoc.cpp b/src/2022/day18/aoc.cpp
index 56681a2..42cfe36 100644
--- a/src/2022/day18/aoc.cpp
+++ b/src/2022/day18/aoc.cpp
@@ -1,9 +1,54 @@
#include "aoc.h"
+#include <deque>
namespace aoc2022 {
-std::pair<int, int> day18(line_view) {
- return {0, 0};
+static int maxx = 0;
+static int maxy = 0;
+static int maxz = 0;
+
+bool is_valid(droplet d, cube& c) {
+ bool bx = d.x >= 0 && d.x < maxx + 1;
+ bool by = d.y >= 0 && d.y < maxy + 1;
+ bool bz = d.z >= 0 && d.z < maxz + 1;
+ return bx && by && bz && c.get(d.x, d.y, d.z) == 0;
}
+
+// flood
+void flood(cube& c) {
}
+std::pair<int, int> day18(line_view file) {
+ std::vector<droplet> ds;
+ per_line(file, [&ds](line_view lv) {
+ droplet d{lv};
+ maxx = std::max(maxx, d.x);
+ maxy = std::max(maxy, d.y);
+ maxz = std::max(maxz, d.z);
+
+ ds.emplace_back(d);
+ return true;
+ });
+
+ cube c{maxx + 1, maxy + 1, maxz + 1};
+ for (auto& d : ds) {
+ c.get(d.x, d.y, d.z) = 1;
+ }
+
+ flood(c);
+ int t0{0}, t1{0};
+ c.traverse([&t0, &c](int x, int y, int z) {
+ if (c.get(x, y, z) == 1) {
+ t0 += 6;
+ t0 -= c.get(x - 1, y, z);
+ t0 -= c.get(x + 1, y, z);
+ t0 -= c.get(x, y - 1, z);
+ t0 -= c.get(x, y + 1, z);
+ t0 -= c.get(x, y, z - 1);
+ t0 -= c.get(x, y, z + 1);
+ }
+ });
+
+ return {t0, t1};
+}
+} // namespace aoc2022