47 lines
961 B
Python
47 lines
961 B
Python
|
|
input = open("input", 'r')
|
||
|
|
|
||
|
|
data = []
|
||
|
|
|
||
|
|
for line in input:
|
||
|
|
data.append(line.rstrip())
|
||
|
|
|
||
|
|
number_pos = set()
|
||
|
|
|
||
|
|
for i, line in enumerate(data):
|
||
|
|
for j, character in enumerate(line):
|
||
|
|
if not character.isdigit() and character != '.':
|
||
|
|
for x,y in [(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)]:
|
||
|
|
if data[i+y][j+x].isdigit():
|
||
|
|
number_pos.add((i+y,j+x))
|
||
|
|
|
||
|
|
seen_pos = set()
|
||
|
|
numbers = []
|
||
|
|
|
||
|
|
for pos_y,pos_x in number_pos:
|
||
|
|
if (pos_y, pos_x) in seen_pos:
|
||
|
|
continue
|
||
|
|
seen_pos.add((pos_y, pos_x))
|
||
|
|
line = data[pos_y]
|
||
|
|
|
||
|
|
start = pos_x
|
||
|
|
end = pos_x
|
||
|
|
|
||
|
|
while line[start-1].isdigit():
|
||
|
|
start -= 1
|
||
|
|
if start-1 < 0:
|
||
|
|
break
|
||
|
|
while line[end+1].isdigit():
|
||
|
|
end += 1
|
||
|
|
if end+1 >= len(line):
|
||
|
|
break
|
||
|
|
|
||
|
|
for i in range(start,end+1):
|
||
|
|
seen_pos.add((pos_y,i))
|
||
|
|
|
||
|
|
numbers.append(int(line[start:end+1]))
|
||
|
|
|
||
|
|
|
||
|
|
print(numbers)
|
||
|
|
|
||
|
|
print(sum(numbers))
|