Solve 2025 day 5
This commit is contained in:
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__)
|
||||
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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user