diff options
Diffstat (limited to 'src/2022/day18/aoc.cpp')
-rw-r--r-- | src/2022/day18/aoc.cpp | 49 |
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 |