Solve 2025 day 5
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -4,6 +4,8 @@
|
|||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
*$py.class
|
*$py.class
|
||||||
|
.python-version
|
||||||
|
uv.lock
|
||||||
|
|
||||||
# C extensions
|
# C extensions
|
||||||
*.so
|
*.so
|
||||||
|
|||||||
45
2025/d05.py
45
2025/d05.py
@@ -1,4 +1,45 @@
|
|||||||
from lib import get_data, Grid2D
|
from lib import get_data
|
||||||
|
|
||||||
data = get_data(__file__)
|
data = get_data(__file__)
|
||||||
print(data)
|
|
||||||
|
ranges, ids = data.split("\n\n")
|
||||||
|
ids = tuple(map(int, ids.splitlines()))
|
||||||
|
ranges = [list(map(int, line.split("-"))) for line in ranges.splitlines()]
|
||||||
|
|
||||||
|
updated = True
|
||||||
|
while updated:
|
||||||
|
updated = False
|
||||||
|
sorted_ranges = []
|
||||||
|
for lo, up in ranges:
|
||||||
|
assert lo <= up
|
||||||
|
for i in range(len(sorted_ranges)):
|
||||||
|
slo, sup = sorted_ranges[i]
|
||||||
|
if up + 1 < slo:
|
||||||
|
sorted_ranges.insert(i, (lo, up))
|
||||||
|
elif lo < slo:
|
||||||
|
sorted_ranges[i] = (lo, max(up, sup))
|
||||||
|
updated = True
|
||||||
|
elif lo <= sup:
|
||||||
|
sorted_ranges[i] = (slo, max(up, sup))
|
||||||
|
updated = True
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
sorted_ranges.append((lo, up))
|
||||||
|
ranges = sorted_ranges
|
||||||
|
|
||||||
|
|
||||||
|
result_part_1 = 0
|
||||||
|
for id_to_check in ids:
|
||||||
|
for lo, up in ranges:
|
||||||
|
if lo <= id_to_check <= up:
|
||||||
|
result_part_1 += 1
|
||||||
|
break
|
||||||
|
print(result_part_1)
|
||||||
|
|
||||||
|
result_part_2 = 0
|
||||||
|
for lo, up in ranges:
|
||||||
|
result_part_2 += up - lo + 1
|
||||||
|
print(result_part_2)
|
||||||
|
assert result_part_2 == 350780324308385
|
||||||
|
|||||||
29
2025/d06.py
Normal file
29
2025/d06.py
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
from lib import get_data
|
||||||
|
|
||||||
|
data = """123 328 51 64
|
||||||
|
45 64 387 23
|
||||||
|
6 98 215 314
|
||||||
|
* + * + """
|
||||||
|
data = get_data(__file__)
|
||||||
|
|
||||||
|
def mul(xs):
|
||||||
|
r = 1
|
||||||
|
for x in xs:
|
||||||
|
r *= x
|
||||||
|
return r
|
||||||
|
|
||||||
|
lines = zip(*[line.split() for line in data.splitlines()])
|
||||||
|
|
||||||
|
r = 0
|
||||||
|
for xs in lines:
|
||||||
|
xs, op = xs[:-1], xs[-1]
|
||||||
|
xs = list(map(int, xs))
|
||||||
|
if op == "+":
|
||||||
|
r += sum(xs)
|
||||||
|
elif op == "*":
|
||||||
|
r += mul(xs)
|
||||||
|
else:
|
||||||
|
assert False, "Unexpected op"
|
||||||
|
print(r)
|
||||||
|
|
||||||
|
|
||||||
@@ -16,6 +16,11 @@ stressful and this will actually be more fun. Thank you Eric Wastl and let's go!
|
|||||||
overall but it was fun.
|
overall but it was fun.
|
||||||
- Day 4: One of the easier grid based puzzles. Less than five minutes with
|
- Day 4: One of the easier grid based puzzles. Less than five minutes with
|
||||||
existing grid library.
|
existing grid library.
|
||||||
|
- Day 5: A problem with ranges; I decided to implement proper range merging this
|
||||||
|
time because I always kind of avoid that. I could probably decrease the
|
||||||
|
complexity from O(n^2) to O(n log(n)) but I am happy that I've implemented
|
||||||
|
merging at all.
|
||||||
|
- Day 6:
|
||||||
|
|
||||||
|
|
||||||
## AoC 2024
|
## AoC 2024
|
||||||
|
|||||||
10
pyproject.toml
Normal file
10
pyproject.toml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[project]
|
||||||
|
name = "aocpy"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "Make ruff and ty available via uv"
|
||||||
|
readme = "README.md"
|
||||||
|
requires-python = ">=3.13"
|
||||||
|
dependencies = [
|
||||||
|
"ruff>=0.14.11",
|
||||||
|
"ty>=0.0.11",
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user