Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.33 KB | None | 0 0
  1. def part1(input_text):
  2.     orbits = [string.split(')') for string in input_text]
  3.  
  4.     orbit_tree = {}
  5.  
  6.     for orbit in orbits:
  7.         orbit_tree.setdefault(orbit[0], set())
  8.         orbit_tree[orbit[0]].add(orbit[1])
  9.    
  10.     count = 0
  11.     depth = 0
  12.     current_level = set()
  13.     next_level = set(['COM'])
  14.  
  15.     while len(next_level) > 0:
  16.         depth += 1
  17.         current_level, next_level = next_level, set()
  18.  
  19.         for node in current_level:
  20.             try:
  21.                 count += depth * len(orbit_tree[node])
  22.                 next_level.update(orbit_tree[node])
  23.             except KeyError:
  24.                 pass
  25.    
  26.     return count
  27.  
  28.  
  29. def part2(input_text):
  30.     orbits = [string.split(')') for string in input_text]
  31.  
  32.     parents = {orbit[1]: orbit[0] for orbit in orbits}
  33.    
  34.     you = ['YOU']
  35.     while you[-1] != 'COM':
  36.         you.append(parents[you[-1]])
  37.    
  38.     san = ['SAN']
  39.     while san[-1] != 'COM':
  40.         san.append(parents[san[-1]])
  41.  
  42.     ind = -1
  43.     while you[ind] == san[ind]:
  44.         ind -= 1
  45.    
  46.     meet = you[ind + 1]
  47.  
  48.     return you.index(meet) + san.index(meet) - 2
  49.  
  50.  
  51. if __name__ == "__main__":
  52.     with open("input_files/AoC2019_day06_input.txt") as f:
  53.         input_text = f.read().split('\n')
  54.  
  55.     print('part 1:', part1(input_text))
  56.     print('part 2:', part2(input_text))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement