73 lines
1.6 KiB
Python
73 lines
1.6 KiB
Python
"""Day X: Advent of Code 2025."""
|
|
|
|
import time
|
|
from aoc import read_lines, read_input, read_grid, read_ints
|
|
|
|
|
|
def part1(data):
|
|
n_array = []
|
|
for i in range(0, len(data) - 1):
|
|
line = data[i].strip()
|
|
if line == '':
|
|
data = data[i+1:]
|
|
break
|
|
nrs = line.split('-')
|
|
n1 = int(nrs[0])
|
|
n2 = int(nrs[1])
|
|
n_array.append((n1, n2))
|
|
|
|
|
|
sum = 0
|
|
for number in data:
|
|
i = int(number.strip())
|
|
for nn in n_array:
|
|
l, h = nn
|
|
if i >= l and i <= h:
|
|
sum += 1
|
|
break
|
|
|
|
return sum
|
|
|
|
|
|
def part2(data):
|
|
n_array = []
|
|
for line in data:
|
|
if line == '':
|
|
break
|
|
nrs = line.split('-')
|
|
n1 = int(nrs[0])
|
|
n2 = int(nrs[1])
|
|
n_array.append((n1, n2))
|
|
|
|
sd = sorted(n_array, key=lambda p: p[0])
|
|
merged = [sd[0]]
|
|
for start, end in sd[1:]:
|
|
last_start, last_end = merged[-1]
|
|
if start <= last_end: # överlappar
|
|
merged[-1] = (last_start, max(last_end, end))
|
|
else:
|
|
merged.append((start, end))
|
|
|
|
|
|
|
|
total = 0
|
|
for k,v in merged:
|
|
total += v - k + 1
|
|
|
|
return total
|
|
|
|
|
|
if __name__ == "__main__":
|
|
DAY = 5 # <- ändra till rätt dag
|
|
data = read_lines(DAY)
|
|
|
|
t0 = time.perf_counter()
|
|
p1 = part1(data)
|
|
t1 = time.perf_counter()
|
|
print(f"Part 1: {p1} ({(t1-t0)*1000:.2f} ms)")
|
|
|
|
t0 = time.perf_counter()
|
|
p2 = part2(data)
|
|
t1 = time.perf_counter()
|
|
print(f"Part 2: {p2} ({(t1-t0)*1000:.2f} ms)")
|