From e5e96bea8b9c925fce9756873a71a76a3a9e33b5 Mon Sep 17 00:00:00 2001 From: SebastianStork Date: Thu, 5 Dec 2024 21:17:50 +0100 Subject: [PATCH] Streamline 2024 day 2 part 1 --- 2024/day-02/main.cpp | 61 +++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/2024/day-02/main.cpp b/2024/day-02/main.cpp index 8490578..c218b71 100644 --- a/2024/day-02/main.cpp +++ b/2024/day-02/main.cpp @@ -1,50 +1,47 @@ -#include #include #include #include using namespace std; -int main() +void readInput(vector> &list) { - vector> list; - - { - ifstream inputFile("input"); - string line; - for (size_t i = 0; getline(inputFile, line); i++) { - list.push_back({}); - stringstream stream(line); - int value; - while (stream >> value) { - list[i].push_back(value); - } - cout << endl; + string line; + while (getline(cin, line)) { + list.push_back({}); + stringstream stream(line); + int value; + while (stream >> value) { + list.back().push_back(value); } } +} - // Part one +int calculateNumberOfSafeReports(const vector> &list) +{ int numberOfSafeReports = 0; for (vector report : list) { bool safe = true; - bool increasing = report[0] < report[1]; - int previousLevel = report[0]; - for (size_t i = 1; i < report.size(); i++) { - int currentLevel = report[i]; - if (increasing) { - if (previousLevel >= currentLevel || currentLevel - previousLevel > 3) { - safe = false; - break; - } - } else { - if (previousLevel <= currentLevel || previousLevel - currentLevel > 3) { - safe = false; - break; - } + + int directionOfChange = (report[0] < report[1]) ? 1 : -1; + for (size_t i = 0; i < report.size() - 1; i++) { + int levelDifference = (report[i + 1] - report[i]) * directionOfChange; + + if (levelDifference <= 0 || levelDifference > 3) { + safe = false; + break; } - previousLevel = currentLevel; } numberOfSafeReports += safe; } - cout << "Number of safe reports: " << numberOfSafeReports << endl; + return numberOfSafeReports; +} + +int main() +{ + vector> list; + readInput(list); + + // Part one + cout << "Number of safe reports: " << calculateNumberOfSafeReports(list) << endl; }