Streamline 2024 day 2 part 1

This commit is contained in:
SebastianStork 2024-12-05 21:17:50 +01:00
parent 4f97d0680c
commit e5e96bea8b

View file

@ -1,50 +1,47 @@
#include <fstream>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
#include <vector> #include <vector>
using namespace std; using namespace std;
int main() void readInput(vector<vector<int>> &list)
{ {
vector<vector<int>> list;
{
ifstream inputFile("input");
string line; string line;
for (size_t i = 0; getline(inputFile, line); i++) { while (getline(cin, line)) {
list.push_back({}); list.push_back({});
stringstream stream(line); stringstream stream(line);
int value; int value;
while (stream >> value) { while (stream >> value) {
list[i].push_back(value); list.back().push_back(value);
}
cout << endl;
} }
} }
}
// Part one int calculateNumberOfSafeReports(const vector<vector<int>> &list)
{
int numberOfSafeReports = 0; int numberOfSafeReports = 0;
for (vector<int> report : list) { for (vector<int> report : list) {
bool safe = true; bool safe = true;
bool increasing = report[0] < report[1];
int previousLevel = report[0]; int directionOfChange = (report[0] < report[1]) ? 1 : -1;
for (size_t i = 1; i < report.size(); i++) { for (size_t i = 0; i < report.size() - 1; i++) {
int currentLevel = report[i]; int levelDifference = (report[i + 1] - report[i]) * directionOfChange;
if (increasing) {
if (previousLevel >= currentLevel || currentLevel - previousLevel > 3) { if (levelDifference <= 0 || levelDifference > 3) {
safe = false; safe = false;
break; break;
} }
} else {
if (previousLevel <= currentLevel || previousLevel - currentLevel > 3) {
safe = false;
break;
}
}
previousLevel = currentLevel;
} }
numberOfSafeReports += safe; numberOfSafeReports += safe;
} }
cout << "Number of safe reports: " << numberOfSafeReports << endl; return numberOfSafeReports;
}
int main()
{
vector<vector<int>> list;
readInput(list);
// Part one
cout << "Number of safe reports: " << calculateNumberOfSafeReports(list) << endl;
} }