aboutsummaryrefslogtreecommitdiff
path: root/src/2017/day20/aoc.cpp
diff options
context:
space:
mode:
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