add 2024 day 2

This commit is contained in:
Joseph Montanaro 2024-12-03 15:45:52 -05:00
parent 1f6d987c53
commit 8b265bc3ec

77
2024/02.cpp Normal file
View File

@ -0,0 +1,77 @@
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> parse_line(string line) {
int start = 0;
vector<int> result;
while (start < line.length()) {
int end = line.find(" ", start);
string word = line.substr(start, end - start);
int n = stoi(word);
result.push_back(n);
start = end + 1;
if (end == -1) {
break;
}
}
return result;
}
bool is_valid(vector<int> report) {
int prev_diff = 0;
for (int i = 1; i < report.size(); i++) {
int diff = report[i] - report[i - 1];
if (diff < -3 || diff == 0 || diff > 3) {
return false;
}
// on the first iteration, we can't compare to the previous difference
if (i == 1) {
prev_diff = diff;
continue;
}
if ((diff > 0 && prev_diff < 0) || (diff < 0 && prev_diff > 0)) {
return false;
}
prev_diff = diff;
}
return true;
}
int main() {
ifstream file("data/02.txt");
string line;
int count_part1 = 0;
int count_part2 = 0;
while (getline(file, line)) {
auto report = parse_line(line);
if (is_valid(report)) {
count_part1++;
count_part2++;
}
else {
for (int i = 0; i < report.size(); i++) {
int n = report[i];
report.erase(report.begin() + i);
if (is_valid(report)) {
count_part2++;
break;
}
report.insert(report.begin() + i, n);
}
}
}
cout << "Part 1: " << count_part1 << "\n";
cout << "Part 2: " << count_part2 << "\n";
}