summaryrefslogtreecommitdiff
path: root/2024/day2/solve2.py
diff options
context:
space:
mode:
Diffstat (limited to '2024/day2/solve2.py')
-rw-r--r--2024/day2/solve2.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/2024/day2/solve2.py b/2024/day2/solve2.py
new file mode 100644
index 0000000..8e2f8e7
--- /dev/null
+++ b/2024/day2/solve2.py
@@ -0,0 +1,42 @@
+from typing import Generator
+
+safe = unsafe = 0
+
+
+def is_safe_with_dampening(report: str) -> bool:
+ numbers = [int(elem) for elem in report.split()]
+ for ii in range(len(numbers)):
+ if is_safe((elem for idx, elem in enumerate(numbers) if idx != ii)):
+ return True
+
+ return False
+
+
+def is_safe(numbers: Generator[int, None, None]) -> bool:
+ last_num = 0
+ increase = True
+ for ii, num in enumerate(numbers):
+ if ii != 0:
+ if ii == 1:
+ increase = num > last_num
+
+ if (num > last_num) != increase:
+ return False
+
+ diff = abs(num - last_num)
+ if diff < 1 or diff > 3:
+ return False
+
+ last_num = num
+
+ return True
+
+
+with open("input") as f:
+ for report in f.readlines():
+ if is_safe_with_dampening(report):
+ safe += 1
+ else:
+ unsafe += 1
+
+print(f"safe: {safe}\nunsafe: {unsafe}") \ No newline at end of file