From fb592df0198cffb535292052ca966d0f0831dd7f Mon Sep 17 00:00:00 2001 From: Naomi Amethyst Date: Wed, 11 Dec 2024 18:29:59 +0000 Subject: [PATCH] day02 part2 --- 2024/day02/part2.cc | 63 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 2024/day02/part2.cc diff --git a/2024/day02/part2.cc b/2024/day02/part2.cc new file mode 100644 index 0000000..80c9d80 --- /dev/null +++ b/2024/day02/part2.cc @@ -0,0 +1,63 @@ +#include +#include +#include +#include + +class report { + std::vector levels; +public: + bool safe(); + friend std::istream& operator>>(std::istream& stream, report& r); + friend std::ostream& operator<<(std::ostream& stream, report& r); +}; + +std::istream& operator>>(std::istream& stream, report& r) { + r.levels.clear(); + std::string s; + std::getline(stream, s, '\n'); + std::stringstream ss(s); + int level; + while (ss >> level) { + r.levels.emplace_back(level); + } + return stream; +} + +std::ostream& operator<<(std::ostream& stream, report& r) { + stream << "report{"; + for (auto elem : r.levels) { + stream << elem << ","; + } + stream << "}"; + return stream; +} + +bool report::safe() { + for (size_t index = 0; index < levels.size(); index++) { + std::vector tmp(levels); + tmp.erase(tmp.begin() + index); + if (std::adjacent_find(tmp.begin(), tmp.end(), [](int a, int b) { + return a - b < 1 || a - b > 3; + }) == tmp.end()) { + return true; + } + if (std::adjacent_find(tmp.begin(), tmp.end(), [](int a, int b) { + return b - a < 1 || b - a > 3; + }) == tmp.end()) { + return true; + } + } + return false; +} + +int main() { + report r; + int count = 0; + while (std::cin >> r) { + if (r.safe()) { + count++; + } + } + std::cout << count << std::endl; + return EXIT_SUCCESS; +}