advent-of-code/2024/day03/part2.cc

25 lines
704 B
C++

#include <iostream>
#include <regex>
#include <string>
int main() {
std::string line;
std::regex r{"(mul\\((\\d+),(\\d+)\\)|do\\(\\)|don't\\(\\))"};
int result = 0;
bool enabled = true;
while (std::getline(std::cin, line)) {
for (std::sregex_iterator iter{line.begin(), line.end(), r}, iter_end; iter != iter_end; iter++) {
const auto &match = *iter;
if (match[1] == "do()") {
enabled = true;
} else if (match[1] == "don't()") {
enabled = false;
} else if (enabled) {
const auto op1 = std::stoi(match[2]), op2 = std::stoi(match[3]);
result += op1 * op2;
}
}
}
std::cout << result << std::endl;
return EXIT_SUCCESS;
}