diff --git a/2024/day-02/main.cpp b/2024/day-02/main.cpp index 2ac1e4a..a134ef7 100644 --- a/2024/day-02/main.cpp +++ b/2024/day-02/main.cpp @@ -4,8 +4,9 @@ using namespace std; -void readInput(vector> &list) +vector> readInput() { + vector> list; string line; while (getline(cin, line)) { list.push_back({}); @@ -15,6 +16,7 @@ void readInput(vector> &list) list.back().push_back(value); } } + return list; } int getIndexOfUnsafeValue(const vector &report) @@ -67,8 +69,7 @@ int calculateNumberOfSafeReports(const vector> &list, const bool app int main() { - vector> list; - readInput(list); + vector> list = readInput(); // Part one cout << "Number of safe reports: " << calculateNumberOfSafeReports(list, false) << endl; diff --git a/2024/day-03/main.cpp b/2024/day-03/main.cpp index 5228b6c..46c324e 100644 --- a/2024/day-03/main.cpp +++ b/2024/day-03/main.cpp @@ -23,8 +23,10 @@ bool isNumber(const string &potentialNumber) return true; } -string getNextValidInstruction(string &line, const bool considerConditionals, bool &doMultiplication) +string getNextValidInstruction(string &line, bool *doMultiplication = nullptr) { + const bool considerConditionals = doMultiplication; + while (true) { { size_t mulPosition = line.find("mul("); @@ -35,17 +37,14 @@ string getNextValidInstruction(string &line, const bool considerConditionals, bo if (considerConditionals) { size_t doPosition = line.find("do()"); size_t dontPosition = line.find("don't()"); + if ((doPosition < mulPosition) && (dontPosition < mulPosition)) { - if (doPosition > dontPosition) { - doMultiplication = true; - } else { - doMultiplication = false; - } + *doMultiplication = doPosition > dontPosition; } else { if (doPosition < mulPosition) { - doMultiplication = true; + *doMultiplication = true; } else if (dontPosition < mulPosition) { - doMultiplication = false; + *doMultiplication = false; } } } @@ -53,7 +52,7 @@ string getNextValidInstruction(string &line, const bool considerConditionals, bo line.erase(0, mulPosition); } - if (considerConditionals && !doMultiplication) { + if (considerConditionals && !*doMultiplication) { line.erase(0, 4); continue; } @@ -98,19 +97,36 @@ int getInstructionResult(const string &instruction) return number1 * number2; } -int getResult(vector lines, const bool considerConditionals) +int calculateSumIgnoringConditionals(vector lines) +{ + int result = 0; + + for (string &line : lines) { + while (true) { + string instruction = getNextValidInstruction(line); + if (instruction.empty()) { + break; + } + + result += getInstructionResult(instruction); + } + } + + return result; +} + +int calculateSumConsideringConditionals(vector lines) { int result = 0; bool doMultiplication = true; for (string &line : lines) { while (true) { - string instruction = getNextValidInstruction(line, - considerConditionals, - doMultiplication); - if (instruction == "") { + string instruction = getNextValidInstruction(line, &doMultiplication); + if (instruction.empty()) { break; } + result += getInstructionResult(instruction); } } @@ -123,9 +139,9 @@ int main() vector lines = readInput(); // Part one - cout << "Sum of all the multiplication: " << getResult(lines, false) << endl; + cout << "Sum of all the multiplications: " << calculateSumIgnoringConditionals(lines) << endl; // Part two - cout << "Sum of all the multiplication (when taking the conditional statements into account): " - << getResult(lines, true) << endl; + cout << "Sum of all the multiplications (when taking the conditional statements into account): " + << calculateSumConsideringConditionals(lines) << endl; }