#!/usr/bin/env python3 from tqdm import tqdm class Node: value = None next = None def __init__(self, value, next): self.value = value self.next = next num = [list(map(int, (char for char in x.strip()))) for x in open("input.txt")][0] num = num + list(range(len(num)+1, 1000000+1)) MAX = len(num) nodes = dict() nodes[num[-1]] = curr = last = Node(num[-1], None) for n in num[-2::-1]: nodes[n] = curr = Node(n, curr) last.next = curr for _ in tqdm(range(10000000)): pickups = [] lp = curr for j in range(3): lp = lp.next pickups.append(lp.value) ap = lp.next destination = curr.value while True: destination -= 1 if destination == 0: destination = MAX if destination not in pickups: break dst = nodes[destination] lp.next = dst.next dst.next = curr.next curr.next = ap curr = curr.next while curr.value != 1: curr = curr.next curr = curr.next res = curr.value curr = curr.next res *= curr.value print(res)