Advertisement
Guest User

Untitled

a guest
Dec 4th, 2023
1,215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.56 KB | Source Code | 0 0
  1. parts = inp.split("\n\n")
  2. seeds = [int(x) for x in parts[0].split(":")[1].split()]
  3. ref = []
  4. for i in range(1, len(parts)):
  5.     ref.append([[int(x) for x in s.split()] for s in parts[i].split("\n")[1:]])
  6.  
  7. def get_state(seed_num):
  8.     cur = seed_num
  9.     for i in range(len(ref)):
  10.         for j in range(len(ref[i])):
  11.             if ref[i][j][1] <= cur < ref[i][j][1] + ref[i][j][2]:
  12.                 cur = ref[i][j][0] + cur - ref[i][j][1]
  13.                 break
  14.         print(seed_num,i,cur)
  15.     return cur
  16.  
  17. def intersect(a,b,c,d):
  18.     return not (b < c or d < a)
  19.  
  20. def get_min(ranges):
  21.     for i in range(len(ref)):
  22.         new_ranges = []
  23.         for j in range(len(ref[i])):
  24.             istart = ref[i][j][1]
  25.             iend = ref[i][j][1] + ref[i][j][2] - 1
  26.             cut_ranges = []
  27.             for r in ranges:
  28.                 if intersect(istart,iend,r[0],r[1]):
  29.                     c1 = max(istart,r[0])
  30.                     c2 = min(iend,r[1])
  31.                     new_ranges.append((c1 + ref[i][j][0] - ref[i][j][1], c2 + ref[i][j][0] - ref[i][j][1]))
  32.                     if r[0] < c1:
  33.                         cut_ranges.append((r[0],c1-1))
  34.                     if r[1] > c2:
  35.                         cut_ranges.append((c2+1,r[1]))
  36.                 else:
  37.                     cut_ranges.append(r)
  38.             ranges = cut_ranges
  39.  
  40.         ranges = cut_ranges + new_ranges
  41.         print(i,ranges)
  42.     return min(r[0] for r in ranges)
  43.  
  44.  
  45. rs = []
  46. for i in range(0,len(seeds),2):
  47.     rs.append((seeds[i],seeds[i+1]+seeds[i]-1))
  48.  
  49. print(get_min(rs))
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement