diff --git a/2019/day6.py b/2019/day6.py new file mode 100644 index 0000000..16a542f --- /dev/null +++ b/2019/day6.py @@ -0,0 +1,42 @@ +def main(): + with open("day6.txt", "rt") as input_file: + lines = input_file.readlines() + entries = [tuple(line.rstrip().split(")")) for line in lines] + orbit_map = build_map(entries) + + # Part 1 + num_orbits = sum(count_orbits(orbit_map, s) for s in orbit_map.keys()) + print("Num orbits:", num_orbits) + + # Part 2 + you_cursor, san_cursor = orbit_map["YOU"], orbit_map["SAN"] + you_way, san_way = [], [] + jumps = 0 + while you_cursor is not None or san_cursor is not None: + you_cursor = orbit_map.get(you_cursor) + san_cursor = orbit_map.get(san_cursor) + you_way.append(you_cursor) + san_way.append(san_cursor) + if you_cursor in san_way: + jumps = san_way.index(you_cursor) + len(you_way) + break + if san_cursor in you_way: + jumps = you_way.index(san_cursor) + len(san_way) + break + print("Required jumps:", jumps + 1) + +def build_map(entries): + orbit_map = {} + for center, satellite in entries: + orbit_map[satellite] = center + return orbit_map + +def count_orbits(orbit_map, satellite): + if satellite in orbit_map: + return 1 + count_orbits(orbit_map, orbit_map[satellite]) + else: + return 0 + + +if __name__ == "__main__": + main()