···1616 return lst[(len(lst) - 1) // 2]
171718181919+# Parse problem input.
1920on_updates = False
2021graph = defaultdict(set)
2122updates = []
···3637 if is_unordered(graph, update) == -1:
3738 part_1 += mid(update)
3839 else:
3939- while True:
4040- swap = False
4141- for i, n in enumerate(update):
4242- afters = update[i+1:]
4343- if any(n in graph[a] for a in afters):
4444- update[i], update[i + 1] = update[i + 1], update[i]
4545- swap = True
4646- if not swap:
4747- break
4040+ # Sort based on how many pages in `updates` should come after a given page.
4141+ afters = {}
4242+ for i, n in enumerate(update):
4343+ afters[n] = len(graph[n] & (set(update) - set([n])))
4444+4545+ update.sort(key=afters.get)
48464947 part_2 += mid(update)
5048