From c7df2c89969cc78f0e86b090eef64e2cce4e3325 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Tue, 3 Dec 2024 17:41:30 +0100 Subject: aoc 2024, day3 --- 2024/src/day03.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 2024/src/day03.cpp (limited to '2024') diff --git a/2024/src/day03.cpp b/2024/src/day03.cpp new file mode 100644 index 0000000..5b6ec9e --- /dev/null +++ b/2024/src/day03.cpp @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include +using namespace std; + +string +read_file(string_view filename) +{ + fstream input{ filename }; + return { istream_iterator{ input }, {} }; +} + +void +part1(const string& data) +{ + static const regex pattern(R"(mul\(\d{1,3},\d{1,3}\))"); + + long sum = 0; + for ( auto it = sregex_iterator(data.begin(), data.end(), pattern); it != sregex_iterator(); ++it ) { + long lhs = 0; + long rhs = 0; + sscanf(it->str().c_str(), "mul(%ld,%ld)", &lhs, &rhs); + sum += lhs * rhs; + } + cout << sum << endl; +} + +void +part2(const string& data) +{ + static const regex pattern(R"(do\(\)|don't\(\)|mul\(\d{1,3},\d{1,3}\))"); + + long sum = 0; + bool state = true; + for ( auto it = sregex_iterator(data.begin(), data.end(), pattern); it != sregex_iterator(); ++it ) { + if ( it->str() == "do()" ) { + state = true; + } + else if ( it->str() == "don't()" ) { + state = false; + } + else if ( state ) { + long lhs = 0; + long rhs = 0; + sscanf(it->str().c_str(), "mul(%ld,%ld)", &lhs, &rhs); + sum += lhs * rhs; + } + } + cout << sum << endl; +} + +int +main() +{ + auto data = read_file("data/day03.txt"); + part1(data); + part2(data); +} -- cgit v1.3