with open("data/input.txt", "r") as f: data = f.read() table = [ [item for item in row] for row in data.split("\n") ] symbols = "&~\"#'{([-|`_\\^`])}@)]=+}$£%*!§/:;,?<>" parts = [] positions = set() for i in range(len(table)): for j in range(len(table[i])): letter = table[i][j] if letter in symbols: found = False for dx in [-1, 0, 1]: for dy in [-1, 0, 1]: y = i + dx x = j + dy if x >= 0 and x < len(table[i]) and y >= 0 and y <= len(table): number = "" digit = table[y][x] if digit != "." and digit.isdigit(): number = digit found = True # Extend right shift = 1 idx = x + shift while idx >= 0 and idx < len(table[y]) and table[y][idx] != "." and table[y][idx].isdigit(): number = number + table[y][idx] idx += shift position = (y, idx) # Extend left shift = -1 idx = x + shift while idx >= 0 and idx < len(table[y]) and table[y][idx] != "." and table[y][idx].isdigit(): number = table[y][idx] + number idx += shift if position not in positions: positions.add(position) parts.append(int(number)) print(sum(parts))