Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.08 KB | None | 0 0
  1. with open('input.txt') as f:
  2.    ls = [s.strip() for s in f.readlines()]
  3.  
  4. init_state = "#.#.#...#..##..###.##.#...#.##.#....#..#.#....##.#.##...###.#...#######.....##.###.####.#....#.#..##"
  5.  
  6. rules = {}
  7. import parse
  8.  
  9. pr = parse.compile("{} => {}")
  10.  
  11. for l in ls:
  12.    r = pr.parse(l)
  13.    rules[r[0]] = r[1]
  14.  
  15. def sum_plants(curr):
  16.    diff = (len(curr) - 100) // 2
  17.    sum = 0
  18.    for i, c in enumerate(curr):
  19.       if c == '#':
  20.          sum += (i - diff)
  21.    return sum
  22.  
  23. curr = init_state
  24. prev_sum = sum_plants(init_state)
  25. diffs = []
  26. num_iters = 1000
  27. for i in range(num_iters):
  28.    if(i == 20):
  29.       print("Part 1: " + str(sum_plants(curr)))
  30.    curr = "...." + curr + "...."
  31.    next = ""
  32.    for x in range(2, len(curr) - 2):
  33.       sub = curr[x-2:x+3]
  34.       next+= rules[sub]
  35.    curr = next
  36.    currsum = sum_plants(curr)
  37.    diff = currsum - prev_sum
  38.    diffs.append(diff)
  39.    if(len(diffs) > 100): diffs.pop(0)
  40.    prev_sum = currsum
  41.  
  42. last100diff = sum(diffs) // len(diffs)
  43.  
  44. total = (50000000000 - num_iters) * last100diff + sum_plants(curr)
  45.  
  46. print("Part 2: " + str(total))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement