day 2 - part 2
This commit is contained in:
parent
c3796ec338
commit
6e40648ec6
2 changed files with 129 additions and 0 deletions
61
src/aoc_2024/day2/part2.py
Normal file
61
src/aoc_2024/day2/part2.py
Normal file
|
@ -0,0 +1,61 @@
|
|||
from pathlib import Path
|
||||
|
||||
|
||||
def is_report_safe(report: list[int]) -> bool:
|
||||
try:
|
||||
is_increasing = True
|
||||
is_decreasing = True
|
||||
for i in range(len(report)):
|
||||
shift = report[i + 1] - report[i]
|
||||
if shift == 0:
|
||||
is_increasing = False
|
||||
is_decreasing = False
|
||||
if shift > 0:
|
||||
is_decreasing = False
|
||||
if shift < 0:
|
||||
is_increasing = False
|
||||
|
||||
if not is_decreasing and not is_increasing:
|
||||
return False
|
||||
|
||||
if abs(shift) > 3:
|
||||
return False
|
||||
except IndexError:
|
||||
pass
|
||||
return True
|
||||
|
||||
|
||||
def is_report_safe_with_tolerance(report: list[int]) -> bool:
|
||||
for i in range(len(report)):
|
||||
tmp_report = list(report)
|
||||
tmp_report.pop(i)
|
||||
is_safe = is_report_safe(tmp_report)
|
||||
if is_safe:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def get_reports(input_file: Path) -> list[list[int]]:
|
||||
reports = []
|
||||
for line in input_file.open():
|
||||
report = [int(r) for r in line.strip().split(" ")]
|
||||
reports.append(report)
|
||||
return reports
|
||||
|
||||
|
||||
def main(data_file: Path):
|
||||
reports = get_reports(data_file)
|
||||
score = 0
|
||||
for report in reports:
|
||||
if is_report_safe(report):
|
||||
score += 1
|
||||
else:
|
||||
if is_report_safe_with_tolerance(report):
|
||||
score += 1
|
||||
print(score)
|
||||
return score
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
file = Path(__file__).parent / "input-data"
|
||||
main(file)
|
Loading…
Add table
Add a link
Reference in a new issue