Advertisement
hhoppe

Advent of code 2023 day 5

Dec 5th, 2023 (edited)
607
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.94 KB | None | 0 0
  1. def day5(s, *, part2=False):
  2.   sections = s.split('\n\n')
  3.   (line,) = sections[0].splitlines()
  4.   values = map(int, line.split(': ')[1].split())
  5.   if part2:
  6.     intervals = [(start, start + n) for start, n in more_itertools.batched(values, 2)]
  7.   else:
  8.     intervals = [(start, start + 1) for start in values]
  9.  
  10.   for section in sections[1:]:
  11.     output_intervals = []
  12.     for line in section.splitlines()[1:]:
  13.       dst, src, num = map(int, line.split())
  14.       new_intervals = []
  15.       for start, stop in intervals:
  16.         i0, i1 = max(src, start), min(src + num, stop)
  17.         if i0 < i1:
  18.           output_intervals.append((dst + (i0 - src), dst + (i1 - src)))
  19.         if i0 > start:
  20.           new_intervals.append((start, min(i0, stop)))
  21.         if i1 < stop:
  22.           new_intervals.append((max(i1, start), stop))
  23.       intervals = new_intervals
  24.     intervals.extend(output_intervals)
  25.  
  26.   return min(start for start, _ in intervals)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement