#include "aoc.h" #include namespace aoc2016 { // A, B bool is_pair(const grid_node& n1, const grid_node& n2) { return n1.s[1] > 0 && n2.s[2] >= n1.s[1]; } void find_pairs(size_t x, const std::vector& ns, int* count) { if (x < ns.size() - 1) { auto& n1 = ns[x]; for (size_t i = x + 1; i < ns.size(); i++) { auto& n2 = ns[i]; if (is_pair(n1, n2)) { *count += 1; } if (is_pair(n2, n1)) { *count += 1; } } find_pairs(x + 1, ns, count); } } std::pair day22(line_view file) { std::vector ns; int maxx{INT32_MIN}; int maxy{INT32_MIN}; per_line(file, [&ns, &maxx, &maxy](line_view lv) { if (*lv.line == '/') { grid_node n{lv}; maxx = std::max(maxx, n.x); maxy = std::max(maxy, n.y); ns.emplace_back(n); } return true; }); storage_grid grid(maxx + 1, maxy + 1); grid.load(ns); auto& n = grid.get(maxx, 0); printf("top right: %d/%d\n", n.s[1], n.s[0]); grid.print(n.s[1]); // std::sort(ns.begin(), ns.end()); // for (auto& n : ns) { // n.print(); // } int count{0}; find_pairs(0, ns, &count); return {count, 0}; } } // namespace aoc2016