#include #include #include #include #include #include #include int q1(std::ifstream &in) { std::vector l1; std::vector l2; for (std::string line; std::getline(in, line);) { int left, right; std::stringstream(line) >> left >> right; l1.push_back(left); l2.push_back(right); } std::sort(l1.begin(), l1.end()); std::sort(l2.begin(), l2.end()); int sum = 0; for (int i = 0; i < l1.size(); i++) { sum += abs(l1[i] - l2[i]); } return sum; } int q2(std::ifstream &in) { std::vector l1; std::unordered_map l2; for (std::string line; std::getline(in, line);) { int left, right; std::stringstream(line) >> left >> right; l1.push_back(left); l2[right]++; } return std::accumulate(l1.begin(), l1.end(), 0, [&l2](int acc, int curr) { return acc + curr * l2[curr]; }); } int main() { std::ifstream input("i1.txt"); std::cout << "Part 1: " << q1(input) << std::endl; // Could re-read the file, or just seek to the beginning. // input = std::ifstream("i1.txt"); input.clear(); input.seekg(0); std::cout << "Part 2: " << q2(input) << std::endl; }