aboutsummaryrefslogtreecommitdiff
path: root/src/2017/day20/aoc.cpp
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2023-02-13 15:46:32 +0800
committerkaiwu <kaiwu2004@gmail.com>2023-02-13 15:46:32 +0800
commit7433c1c2b67b306e42d69209e5e67f79ec24b646 (patch)
tree2eb2ded5a5b4836e6eaf4f58412551b99b3e6731 /src/2017/day20/aoc.cpp
parent51acfc18dfd36fe4eb018a2626893c0e8401ab49 (diff)
downloadadvent-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.cpp51
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