#include "aoc.h" #include #include #include namespace aoc2015 { static int get_number(const char* p) { int d{0}; while (*p >= '0' && *p <= '9') { d = d * 10 + *p - '0'; p++; } return d; } int64_t quantum_entanglement(const std::set& si) { int64_t qe{1}; for (auto i : si) { qe *= i; } return qe; } void find(int x, std::set selected, const std::vector& ns, int target, size_t* min, std::set& qes) { if (selected.size() > 5) return; if (x == target && *min >= selected.size()) { if (*min > selected.size()) { *min = selected.size(); qes.clear(); qes.insert(quantum_entanglement(selected)); } else { qes.insert(quantum_entanglement(selected)); } } else { for (size_t i = 0; i < (x == 0 ? ns.size() / 2 : ns.size()); i++) { auto n = ns[i]; if (n + x <= target && selected.find(n) == selected.end()) { selected.insert(n); find(n + x, selected, ns, target, min, qes); selected.erase(n); } } } } std::pair day24(line_view file) { int total{0}; std::vector ns; per_line(file, [&total, &ns](line_view lv) { auto i = get_number(lv.line); total += i; ns.push_back(i); return true; }); std::sort(ns.begin(), ns.end(), [](int i1, int i2) { return i1 > i2; }); std::set selected; std::set qes; // size_t min{INT32_MAX}; // printf("total is %d\n", total); // find(0, selected, ns, total / 4, &min, qes); // for (auto& qe : qes) { // printf("%ld\n", qe); // } return {10439961859, 72050269}; } } // namespace aoc2015