···
file = '3.input' if len(sys.argv) <= 1 else sys.argv[1]
for 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
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
11
+
right = list(enumerate(line[:-(n-1)+it or len(line)]))
12
+
allowed = [(i, d) for i, d in right if i > max(result)]
13
+
pick = max(allowed, key=lambda a: a[1])
14
+
result[it] = pick[0]
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
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
17
+
output_two += int("".join(line[i] for i in result))
19
+
output_twelve += int("".join(line[i] for i in result))
print(f'p1: {output_two}')
print(f'p2: {output_twelve}')