From 6bdb9bc94c54b9ae37d7a358057d84c893428e0b Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Tue, 3 Dec 2024 18:09:36 +0100 Subject: benutze sub-groups in der regex; kein sscanf() mehr --- 2024/src/day03.cpp | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/2024/src/day03.cpp b/2024/src/day03.cpp index 5b6ec9e..bfbd781 100644 --- a/2024/src/day03.cpp +++ b/2024/src/day03.cpp @@ -15,14 +15,11 @@ read_file(string_view filename) void part1(const string& data) { - static const regex pattern(R"(mul\(\d{1,3},\d{1,3}\))"); + 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; + for ( auto it = sregex_iterator{ data.begin(), data.end(), pattern }; it != sregex_iterator{}; ++it ) { + sum += stol((*it)[1]) * stol((*it)[2]); } cout << sum << endl; } @@ -30,11 +27,11 @@ part1(const string& data) void part2(const string& data) { - static const regex pattern(R"(do\(\)|don't\(\)|mul\(\d{1,3},\d{1,3}\))"); + 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 ) { + for ( auto it = sregex_iterator{ data.begin(), data.end(), pattern }; it != sregex_iterator{}; ++it ) { if ( it->str() == "do()" ) { state = true; } @@ -42,10 +39,7 @@ part2(const string& data) state = false; } else if ( state ) { - long lhs = 0; - long rhs = 0; - sscanf(it->str().c_str(), "mul(%ld,%ld)", &lhs, &rhs); - sum += lhs * rhs; + sum += stol((*it)[1]) * stol((*it)[2]); } } cout << sum << endl; -- cgit v1.3