advent of code 2025

day 3 part 1

kot.pink 9e4fa252 d46a294a

verified
Changed files
+33
+29
3.py
···
+
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}')
+4
3.test
···
+
987654321111111
+
811111111111119
+
234234234234278
+
818181911112111