"""Day 15. The 30000000 takes a while to complete """ with open("input") as f: memory = list(map(int, f.read().rstrip().split(","))) data = {val: {"position": pos + 1, "count": 1} for pos, val in enumerate(memory)} pos = len(memory) + 1 last = memory[-1] # for x in range(2020 - pos + 1): for x in range(30000000 - pos + 1): if data[last]["count"] == 1: val = 0 else: x = pos - 1 y = data[last]["position"] val = x - y data[last]["position"] = x if val not in data: data[val] = {"position": pos, "count": 1} last = val data[val]["count"] += 1 pos += 1 print(val)