Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def compose_graph(root, data, graph = None):
- if not graph:
- graph = {root: [], **{k[1]: [] for k in data}}
- for center, orbiter in data:
- if center == root:
- graph[orbiter] = graph[center] + [orbiter]
- compose_graph(orbiter, data, graph)
- return graph
- def count_to_common(path_from, path_to):
- count = 0
- for o in path_from[::-1][1:]:
- if o not in path_to:
- count += 1
- else:
- break
- return count
- def main():
- data = [x.strip().split(')') for x in open('input').readlines()]
- g = compose_graph('COM', data)
- part1 = sum((len(a) for k,a in g.items()))
- part2 = count_to_common(g['YOU'], g['SAN']) + count_to_common(g['SAN'], g['YOU'])
- print('part 1: %s' % part1)
- print('part 2: %s' % part2)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement