summaryrefslogtreecommitdiff
path: root/2024/2B.cpp
diff options
context:
space:
mode:
Diffstat (limited to '2024/2B.cpp')
-rw-r--r--2024/2B.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/2024/2B.cpp b/2024/2B.cpp
new file mode 100644
index 0000000..674f98f
--- /dev/null
+++ b/2024/2B.cpp
@@ -0,0 +1,61 @@
+#include <bits/stdc++.h>
+#include "readfile.hpp"
+
+int get_problem(const std::vector<int> &numbers) {
+ bool increasing = false, decreasing = false;
+ int prev = -1;
+ for (int i = 0; i < numbers.size(); ++i) {
+ if (prev == -1) {
+ prev = numbers[i];
+ continue;
+ }
+ if (prev < numbers[i])
+ increasing = true;
+ else if (prev > numbers[i])
+ decreasing = true;
+ if (std::abs(prev - numbers[i]) > 3 || prev == numbers[i] || increasing && decreasing || !increasing && !decreasing)
+ return i;
+ prev = numbers[i];
+ }
+ return -1;
+}
+
+
+int main(int argc, char const *argv[])
+{
+ int res = 0;
+ std::vector<std::string> file = readfile("2.in");
+ if (file.empty())
+ return 1;
+
+ for (const auto &line : file) {
+ std::istringstream iss(line);
+ std::vector<int> lv;
+ int n;
+ while (iss >> n) {
+ lv.push_back(n);
+ }
+ if (get_problem(lv) == -1) {
+ ++res;
+ continue;
+ }
+
+ // not safe / strike 1
+ // try removing the problem number
+ for (int i = 0; i < lv.size(); ++i) {
+ std::vector<int> lv2;
+ for (int j = 0; j < lv.size(); ++j) {
+ if (j == i)
+ continue;
+ lv2.push_back(lv[j]);
+ }
+ if (get_problem(lv2) == -1) {
+ ++res;
+ break;
+ }
+ }
+ }
+
+ // print
+ std::cout << res << std::endl;
+} \ No newline at end of file