def part_1(data): target = 2017 steps = int(data) xs = [0] i = 0 for n in range(1, target + 1): i = (i + steps) % len(xs) xs.insert(i + 1, n) i += 1 for j in range(len(xs)): if xs[j] == target: print(xs[j + 1]) return def part_2(data, m=50_000_000): steps = int(data) len_xs = 1 last_zero = None i = 0 for n in range(1, m + 1): i = (i + steps) % len_xs if i == 0: last_zero = n len_xs += 1 i += 1 return last_zero def main(): data = open(0).read().strip() part_1(data) assert part_2(data, 1000) == 531 assert part_2(data, 10000) == 2616 print(part_2(data)) if __name__ == "__main__": main()