43 lines
1.1 KiB
Python
Executable File
43 lines
1.1 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
import re
|
|
from math import prod
|
|
|
|
def main():
|
|
total = 0
|
|
|
|
with open('input.txt', 'r') as input_file:
|
|
lines = input_file.readlines()
|
|
lines = [line.strip() for line in lines]
|
|
|
|
stars = []
|
|
numbers = {}
|
|
|
|
for y in range(len(lines)):
|
|
for number in re.finditer(r'\d+', lines[y]):
|
|
try:
|
|
numbers[y][number.span()] = number.group()
|
|
except KeyError:
|
|
numbers[y] = {number.span(): number.group()}
|
|
for star in re.finditer(r'\*', lines[y]):
|
|
stars.append([y, star.start()])
|
|
|
|
for star in stars:
|
|
adjacent = []
|
|
|
|
for line in range(star[0] - 1, star[0] +2):
|
|
try:
|
|
for number in numbers[line]:
|
|
if star[1] in range(number[0]-1, number[1]+1):
|
|
adjacent.append(int(numbers[line][number]))
|
|
continue
|
|
except KeyError:
|
|
continue
|
|
if len(adjacent) == 2:
|
|
total += prod(adjacent)
|
|
print(total)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|