From 262d7a7c40f73eb8e0536bbb89686ff225220f88 Mon Sep 17 00:00:00 2001
From: zb5g22 <zb5g22@soton.ac.uk>
Date: Mon, 2 Dec 2024 18:00:11 +0000
Subject: [PATCH] Day 2 part b

---
 Day 2/d2b.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)
 create mode 100644 Day 2/d2b.py

diff --git a/Day 2/d2b.py b/Day 2/d2b.py
new file mode 100644
index 0000000..326d265
--- /dev/null
+++ b/Day 2/d2b.py	
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Mon Dec  2 12:08:01 2024
+
+@author: zoƫ
+"""
+
+import numpy as np
+
+
+def run_checks(difference_list):
+    increasing_flag = 0
+    fail_pos = -1
+    for pos in range(len(difference_list)):
+        if difference_list[0] >= 0:
+            increasing_flag = 1
+        if not abs(difference_list[pos]) >= 1:
+            fail_pos = pos
+            break
+        elif not abs(difference_list[pos]) <= 3:
+            fail_pos = pos
+            break
+        elif increasing_flag == 1:
+            if not difference_list[pos] >= 0:
+                fail_pos = pos
+                break
+        else:
+            if not difference_list[pos] < 0:
+                fail_pos = pos
+                break
+    return fail_pos
+
+
+with open("input", "r") as file:
+    data = file.readlines()
+    file.close()
+
+safe_reports = 0
+for report in data:
+    report = report.strip("\n").split(" ")
+    difference_list = []
+    sign_list = []
+    for level in range(len(report) - 1):
+        difference_list.append(int(report[level + 1]) - int(report[level]))
+    fail_pos = run_checks(difference_list)
+    if fail_pos == -1:
+        safe_reports += 1
+    else:
+        for attempt in range(len(report)):
+            mod_report = report.copy()
+            del mod_report[attempt]
+            difference_list = []
+            for level in range(len(mod_report) - 1):
+                difference_list.append(int(mod_report[level + 1])
+                                       - int(mod_report[level]))
+            try_success = run_checks(difference_list)
+            if try_success == -1:
+                safe_reports += 1
+                break
+
+print(f"Number of safe and dampened reports: {safe_reports}")
-- 
GitLab