import sys import heapq output_two = 0 output_twelve = 0 file = '3.input' if len(sys.argv) <= 1 else sys.argv[1] for line in open(file).readlines(): first_seen = {} # digit to first index last_seen = {} # digit to last index for i, digit in enumerate(line.strip()): first_seen.setdefault(int(digit), i) last_seen[int(digit)] = i max_all = max(first_seen.keys()) # largest digit (always included) if last_seen[max_all] > first_seen[max_all]: # if it appears twice, just use it output_two += max_all * 11 continue try: # first search right of the max digit max_right = max(digit for digit, i in last_seen.items() if i > first_seen[max_all]) output_two += max_all * 10 + max_right except ValueError: # search left for max digit max_left = max(digit for digit, i in last_seen.items() if i < first_seen[max_all]) output_two += max_left * 10 + max_all print(f'p1: {output_two}') print(f'p2: {output_twelve}')