1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include "aoc.h"
#include <algorithm>
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<grid_node>& 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<int64_t, int64_t> day22(line_view file) {
std::vector<grid_node> 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);
grid.print();
// 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
|