Added template (see 2022) + Day 2 completed

This commit is contained in:
Fedaya 2024-12-02 07:54:03 +01:00
parent 9d61d24b64
commit f37e249160
8 changed files with 77 additions and 1 deletions

2
.gitignore vendored
View File

@ -1,5 +1,5 @@
# Created by venv; see https://docs.python.org/3/library/venv.html # Created by venv; see https://docs.python.org/3/library/venv.html
cookies.txt cookies.txt
**/input **/*input
__pycache__ __pycache__
.venv .venv

20
day2/common.py Normal file
View File

@ -0,0 +1,20 @@
type Report = tuple[int, ...]
type ReportList = list[Report]
def parse(filename: str) -> ReportList:
report_list: ReportList = []
with open(filename) as f:
while line := f.readline().strip("\n"):
report: Report = tuple(int(digit) for digit in line.split())
report_list.append(report)
return report_list
def is_safe(report: Report) -> bool:
if not (report == tuple(sorted(report)) or report == tuple(sorted(report, reverse=True))):
return False
for i, value in enumerate(report[:-1]):
if abs(value - report[i + 1]) > 3 or value == report[i + 1]:
return False
return True

14
day2/part1.py Executable file
View File

@ -0,0 +1,14 @@
#!/usr/bin/env python
from common import ReportList, is_safe, parse
def solve(input: ReportList) -> int:
return len(list(filter(is_safe, input)))
def main():
print(solve(parse("input")))
if __name__ == "__main__":
main()

22
day2/part2.py Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env python
from common import Report, ReportList, is_safe, parse
def report_remove(report: Report, index: int) -> Report:
return report[:index] + report[index + 1 :]
def is_safe_dampened(report: Report) -> bool:
return is_safe(report) or any(map(is_safe, map(lambda x: report_remove(report, x[0]), enumerate(report))))
def solve(input: ReportList) -> int:
return len(list(filter(is_safe_dampened, input)))
def main():
print(solve(parse("input")))
if __name__ == "__main__":
main()

View File

@ -1,4 +1,5 @@
#!/bin/bash #!/bin/bash
day=$1 day=$1
mkdir day${day} mkdir day${day}
cp template/* day${day}
curl -o day${day}/input --cookie ~/AdventOfCode/2024/cookies.txt https://adventofcode.com/2024/day/$day/input curl -o day${day}/input --cookie ~/AdventOfCode/2024/cookies.txt https://adventofcode.com/2024/day/$day/input

2
requirements.txt Normal file
View File

@ -0,0 +1,2 @@
ruff
mypy

3
template/common.py Normal file
View File

@ -0,0 +1,3 @@
def parse(filename: str):
with open(filename) as f:
return [line[:-1] for line in f.readlines()]

14
template/part1.py Executable file
View File

@ -0,0 +1,14 @@
#!/usr/bin/env python
from common import parse
def solve(input):
pass
def main():
print(solve(parse("input")))
if __name__ == "__main__":
main()