diff options
author | kaiwu <kaiwu2004@gmail.com> | 2023-02-13 15:46:32 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2023-02-13 15:46:32 +0800 |
commit | 7433c1c2b67b306e42d69209e5e67f79ec24b646 (patch) | |
tree | 2eb2ded5a5b4836e6eaf4f58412551b99b3e6731 /src/2017/day20/aoc.cpp | |
parent | 51acfc18dfd36fe4eb018a2626893c0e8401ab49 (diff) | |
download | advent-of-code-7433c1c2b67b306e42d69209e5e67f79ec24b646.tar.gz advent-of-code-7433c1c2b67b306e42d69209e5e67f79ec24b646.zip |
2017 day20
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 |