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