#include #include // for std::pair #include #include #include #include //#include #include #include #include "solutions.hpp" using namespace std; pair solve1(istream &input) { unordered_set seen; unordered_map> targets; string part1; string part2; bool part1_solved = false; bool part2_solved = false; for(string line; getline(input, line); ) { int64_t number = stoi(line); if (!part1_solved && seen.contains(2020 - number)) { part1 = to_string((2020 - number) * number); part1_solved = true; } if (!part2_solved) { auto search = targets.find(number); if (search != targets.end()) { part2 = to_string(number * search->second.first * search->second.second); part2_solved = true; } for (int64_t partner : seen) { if (number + partner <= 2020) { targets[2020 - number - partner] = pair(number, partner); } } } if (part1_solved && part2_solved) { return pair(part1, part2); } seen.insert(number); } return pair(part1, part2); }