2025 05
This commit is contained in:
parent
09d3f25b09
commit
403bd0d4e3
1 changed files with 35 additions and 0 deletions
35
Python/2025/05/main.py
Normal file
35
Python/2025/05/main.py
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
import bisect
|
||||||
|
intervals, ids = open("input", 'r').read().split("\n\n")
|
||||||
|
|
||||||
|
intervals = sorted([
|
||||||
|
[int(nm) for nm in interval.split("-")] for interval in intervals.split("\n")
|
||||||
|
])
|
||||||
|
ids = [int(id) for id in ids.rstrip().split("\n")]
|
||||||
|
|
||||||
|
# Merge intervals
|
||||||
|
merged_intervals = [intervals[0]]
|
||||||
|
for interval in intervals[1:]:
|
||||||
|
if interval[0] <= merged_intervals[-1][1]:
|
||||||
|
merged_intervals[-1][1] = max(interval[1], merged_intervals[-1][1])
|
||||||
|
else:
|
||||||
|
merged_intervals.append(interval)
|
||||||
|
|
||||||
|
def check_id_in_intervals(id, intervals):
|
||||||
|
left_interval = bisect.bisect(intervals,id,key=lambda l: l[0])-1
|
||||||
|
if left_interval < 0:
|
||||||
|
return False
|
||||||
|
return id <= intervals[left_interval][1]
|
||||||
|
|
||||||
|
fresh_ids = [
|
||||||
|
check_id_in_intervals(id, merged_intervals)
|
||||||
|
for id in ids
|
||||||
|
]
|
||||||
|
|
||||||
|
print(len([fresh_id for fresh_id in fresh_ids if fresh_id is True]))
|
||||||
|
|
||||||
|
# Part 2
|
||||||
|
total = 0
|
||||||
|
for interval in merged_intervals:
|
||||||
|
start, end = interval
|
||||||
|
total += end - start + 1
|
||||||
|
print(total)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue