diff options
Diffstat (limited to 'src/2017/day20/aoc.cpp')
-rw-r--r-- | src/2017/day20/aoc.cpp | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/src/2017/day20/aoc.cpp b/src/2017/day20/aoc.cpp index 74f06a8..21162c4 100644 --- a/src/2017/day20/aoc.cpp +++ b/src/2017/day20/aoc.cpp @@ -1,6 +1,55 @@ #include "aoc.h" +#include <algorithm> +#include <set> namespace aoc2017 { -std::pair<int64_t, int64_t> day20(line_view) { return {0, 0}; } +void collide(size_t i, const std::vector<particle>& ps, std::set<size_t>& rs) { + if (i < ps.size()) { + if (rs.find(i) != rs.end()) { + for (size_t x = i + 1; x < ps.size(); x++) { + if (ps[i] == ps[x]) { + rs.erase(i); + rs.erase(x); + } + } + } + collide(i + 1, ps, rs); + } +} + +std::pair<int64_t, int64_t> day20(line_view file) { + std::vector<particle> ps; + std::set<size_t> rs; + int i{0}; + per_line(file, [&rs, &ps, &i](line_view lv) { + rs.insert(i); + ps.emplace_back(i++, lv); + return true; + }); + + // part 1 + // while (true) { + // std::sort(ps.begin(), ps.end()); + // int i{0}; + // for (auto& p : ps) { + // if (i < 10) { + // printf("%d[%ld] ", p.id, p.mdistance()); + // } + // p.tick(); + // i++; + // } + // printf("\n"); + // } + + // part 2 + // while (true) { + // collide(0, ps, rs); + // for (size_t i: rs) { + // ps[i].tick(); + // } + // printf("%zu\n", rs.size()); + // } + return {457, 448}; +} } // namespace aoc2017 |