From 50ffa7beba18811b74945b762a86da3fd5a795e5 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Sat, 7 Dec 2024 08:22:16 +0100 Subject: aoc 2024, day 7, part 1 --- 2024/src/day07.cpp | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 2024/src/day07.cpp diff --git a/2024/src/day07.cpp b/2024/src/day07.cpp new file mode 100644 index 0000000..9b16b76 --- /dev/null +++ b/2024/src/day07.cpp @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include +#include +using namespace std; + +vector>> +read_file(string_view filename) +{ + fstream input{ filename }; + + vector>> data; + for ( string line; getline(input, line); ) { + auto pos = line.find(':'); + + stringstream str{ line.substr(pos + 1) }; + data.emplace_back(stol(line.substr(0, pos)), vector{ istream_iterator{ str }, {} }); + } + return data; +} + +bool +can_evaluated(long first, const vector& values) +{ + for ( unsigned long pattern = 0; pattern != (1U << (values.size() - 1)); ++pattern ) { + long result = values.at(0); + for ( size_t idx = 1; idx < values.size(); ++idx ) { + if ( (pattern & (1U << (idx - 1))) == 0 ) { + result += values.at(idx); + } + else { + result *= values.at(idx); + } + } + if ( first == result ) { + return true; + } + } + return false; +} + +void +part1(const vector>>& data) +{ + long sum = 0; + for ( const auto& [first, values]: data ) { + if ( can_evaluated(first, values) ) { + sum += first; + } + } + cout << sum << endl; +} + +int +main() +{ + auto data = read_file("data/day07.txt"); + + part1(data); +} -- cgit v1.3