···11+import fileinput
22+33+SYMBOLS = {}
44+PARTS = []
55+66+# Parse input.
77+for y, line in enumerate(fileinput.input()):
88+ num = ''
99+ start = None
1010+ for x, c in enumerate(line.strip()):
1111+ if not c.isdigit() and c != '.':
1212+ SYMBOLS[x, y] = c
1313+1414+ if c.isdigit():
1515+ if not num:
1616+ start = x
1717+ num += c
1818+ elif num:
1919+ PARTS.append((int(num), y, start, x - 1))
2020+ num = ''
2121+2222+ if num:
2323+ PARTS.append((int(num), y, start, x - 1))
2424+2525+# Solve problem.
2626+part_1_seen = set()
2727+part_2 = 0
2828+2929+for x, y in SYMBOLS:
3030+ adj = []
3131+ for i, (n, yy, start, end) in enumerate(PARTS):
3232+ if yy - 1 <= y <= yy + 1 and start - 1 <= x <= end + 1:
3333+ part_1_seen.add(i)
3434+ adj.append(n)
3535+3636+ if len(adj) == 2 and SYMBOLS[x, y] == '*':
3737+ part_2 += adj[0] * adj[1]
3838+3939+4040+print("Part 1:", sum(PARTS[i][0] for i in part_1_seen))
4141+print("Part 2:", part_2)