Added template (see 2022) + Day 2 completed
This commit is contained in:
parent
9d61d24b64
commit
f37e249160
2
.gitignore
vendored
2
.gitignore
vendored
@ -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
20
day2/common.py
Normal 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
14
day2/part1.py
Executable 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
22
day2/part2.py
Executable 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()
|
@ -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
2
requirements.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ruff
|
||||||
|
mypy
|
3
template/common.py
Normal file
3
template/common.py
Normal 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
14
template/part1.py
Executable 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()
|
Loading…
x
Reference in New Issue
Block a user