Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.86 KB | None | 0 0
  1.  
  2. def compose_graph(root, data, graph = None):
  3.     if not graph:
  4.         graph = {root: [], **{k[1]: [] for k in data}}
  5.  
  6.     for center, orbiter in data:
  7.         if center == root:
  8.             graph[orbiter] = graph[center] + [orbiter]
  9.             compose_graph(orbiter, data, graph)
  10.     return graph
  11.  
  12. def count_to_common(path_from, path_to):
  13.     count = 0
  14.     for o in path_from[::-1][1:]:
  15.         if o not in path_to:
  16.             count += 1
  17.         else:
  18.             break
  19.     return count
  20.  
  21. def main():
  22.     data = [x.strip().split(')') for x in open('input').readlines()]
  23.     g = compose_graph('COM', data)
  24.  
  25.     part1 = sum((len(a) for k,a in g.items()))
  26.     part2 = count_to_common(g['YOU'], g['SAN']) + count_to_common(g['SAN'], g['YOU'])
  27.  
  28.     print('part 1: %s' % part1)
  29.     print('part 2: %s' % part2)
  30.  
  31. if __name__ == "__main__":
  32.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement