1import sys
2import heapq
3
4output_two = 0
5output_twelve = 0
6file = '3.input' if len(sys.argv) <= 1 else sys.argv[1]
7for line in open(file).readlines():
8 first_seen = {} # digit to first index
9 last_seen = {} # digit to last index
10 for i, digit in enumerate(line.strip()):
11 first_seen.setdefault(int(digit), i)
12 last_seen[int(digit)] = i
13
14 max_all = max(first_seen.keys()) # largest digit (always included)
15 if last_seen[max_all] > first_seen[max_all]: # if it appears twice, just use it
16 output_two += max_all * 11
17 continue
18
19 try:
20 # first search right of the max digit
21 max_right = max(digit for digit, i in last_seen.items() if i > first_seen[max_all])
22 output_two += max_all * 10 + max_right
23 except ValueError:
24 # search left for max digit
25 max_left = max(digit for digit, i in last_seen.items() if i < first_seen[max_all])
26 output_two += max_left * 10 + max_all
27
28print(f'p1: {output_two}')
29print(f'p2: {output_twelve}')