add 2024/day1-day5 python
This commit is contained in:
parent
6c64d1b62e
commit
7c4e98ebcf
5 changed files with 360 additions and 0 deletions
76
2024/02/main.py
Executable file
76
2024/02/main.py
Executable file
|
@ -0,0 +1,76 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- encoding: utf-8; py-indent-offset: 4 -*-
|
||||
|
||||
# Author: Sebastian Mark
|
||||
# CC-BY-SA (https://creativecommons.org/licenses/by-sa/4.0/deed.de)
|
||||
|
||||
# pylint: disable=missing-module-docstring,missing-function-docstring,consider-using-f-string
|
||||
|
||||
|
||||
def readinput() -> list[int]:
|
||||
reports = []
|
||||
with open("input", "r", encoding="utf-8") as file:
|
||||
for line in file:
|
||||
levels = list(map(int, line.split(" ")))
|
||||
reports.append(levels)
|
||||
return reports
|
||||
|
||||
|
||||
def is_valid_level_difference(i: int, j: int) -> bool:
|
||||
if i == j:
|
||||
return False
|
||||
|
||||
if abs(i - j) > 3:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def is_sorted(levels: list) -> bool:
|
||||
asc_sorted = levels == sorted(levels)
|
||||
desc_sorted = levels == sorted(levels, reverse=True)
|
||||
return asc_sorted or desc_sorted
|
||||
|
||||
|
||||
def is_save(levels: list) -> bool:
|
||||
if not is_sorted(levels):
|
||||
return False
|
||||
|
||||
for i in range(len(levels) - 1):
|
||||
if not is_valid_level_difference(levels[i], levels[i + 1]):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def remove_level_by_index(levels: list, index: int) -> list:
|
||||
copy = levels.copy()
|
||||
copy.pop(index)
|
||||
return copy
|
||||
|
||||
|
||||
def is_save_with_damper(levels: list) -> bool:
|
||||
if is_save(levels):
|
||||
return True
|
||||
|
||||
for i in range(len(levels)):
|
||||
if is_save(remove_level_by_index(levels, i)):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
reports = readinput()
|
||||
|
||||
# part 1
|
||||
save_count = sum(is_save(report) for report in reports)
|
||||
print("Save reports: %d" % save_count)
|
||||
|
||||
# part 2
|
||||
save_count = sum(is_save_with_damper(report) for report in reports)
|
||||
print("Save reports (with damper): %d" % save_count)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Add table
Add a link
Reference in a new issue