#include #include #include #include #include #include using namespace std; auto read_file(string_view filename) { fstream input{ filename }; vector data; for ( long value = 0; input >> value; ) { data.emplace_back(value); } return data; } void process(const vector& values) { const long year = 2020; if (accumulate(values.begin(), values.end(), 0L) == year) { cout << accumulate(values.begin(), values.end(), 1, multiplies<>()) << endl; } } void combination(const vector& values, size_t r) { vector marker(values.size()); fill(marker.end() - long(r), marker.end(), true); vector subset(r); do { subset.clear(); for ( size_t i = 0; i != values.size(); ++i ) { if ( marker[i] ) { subset.emplace_back(values[i]); } } process(subset); } while ( std::next_permutation(marker.begin(), marker.end()) ); } int main() { auto values = read_file("data/day01.txt"); combination(values, 2); combination(values, 3); }