···11+import sys
22+import heapq
33+44+output_two = 0
55+output_twelve = 0
66+file = '3.input' if len(sys.argv) <= 1 else sys.argv[1]
77+for line in open(file).readlines():
88+ first_seen = {} # digit to first index
99+ last_seen = {} # digit to last index
1010+ for i, digit in enumerate(line.strip()):
1111+ first_seen.setdefault(int(digit), i)
1212+ last_seen[int(digit)] = i
1313+1414+ max_all = max(first_seen.keys()) # largest digit (always included)
1515+ if last_seen[max_all] > first_seen[max_all]: # if it appears twice, just use it
1616+ output_two += max_all * 11
1717+ continue
1818+1919+ try:
2020+ # first search right of the max digit
2121+ max_right = max(digit for digit, i in last_seen.items() if i > first_seen[max_all])
2222+ output_two += max_all * 10 + max_right
2323+ except ValueError:
2424+ # search left for max digit
2525+ max_left = max(digit for digit, i in last_seen.items() if i < first_seen[max_all])
2626+ output_two += max_left * 10 + max_all
2727+2828+print(f'p1: {output_two}')
2929+print(f'p2: {output_twelve}')