hhoppe

Advent of code 2025 day 5

Dec 5th, 2025 (edited)
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.04 KB | None | 0 0
  1. def day5(s, *, part2=False, unoptimized_part1=False):
  2.   s_intervals, s_indices = s.split('\n\n')
  3.  
  4.   input_intervals = []
  5.   for line in s_intervals.splitlines():
  6.     start, end = map(int, line.split('-'))
  7.     input_intervals.append((start, end + 1))
  8.  
  9.   indices = list(map(int, s_indices.splitlines()))
  10.  
  11.   # Sort the intervals and merge adjacent or overlapping intervals.
  12.   intervals = []
  13.   for start, stop in sorted(input_intervals):
  14.     if not intervals or start > intervals[-1][1]:
  15.       intervals.append((start, stop))
  16.     elif stop > intervals[-1][1]:
  17.       intervals[-1] = intervals[-1][0], stop
  18.  
  19.   if part2:
  20.     return sum(stop - start for start, stop in intervals)
  21.  
  22.   if unoptimized_part1:
  23.     return sum(any(start <= index < stop for start, stop in intervals) for index in indices)
  24.  
  25.   # Optimized Part 1.
  26.   count = 0
  27.   for index in indices:
  28.     i = bisect.bisect_left(intervals, index, key=lambda interval: interval[0])
  29.     if i > 0:
  30.       start, stop = intervals[i - 1]
  31.       count += start <= index < stop
  32.   return count
Advertisement
Add Comment
Please, Sign In to add comment