adventOfCode_2023/python/Day 3/main2.py

62 lines
1.9 KiB
Python

from io import open
import re
import numpy as np
from itertools import product
# We open the txt document containing the games
input=open('input.txt','r')
# We read the text inside distinguishing by lines
lines = input.readlines()
# Close the txt file to be able to work on the text without having the file open.
input.close()
del(input)
for i in range(len(lines)):
lines[i] = lines[i].replace("\n", "")
list_symbols = []
cont_row = 0
for line in lines:
cont_col = 0
for letter in line:
if letter != '.' and not letter.isdigit():
list_symbols.append((letter, cont_row, cont_col))
cont_col += 1
cont_row += 1
pos_numbers = []
for option in list_symbols:
row_option = option[1]
col_option = option[2]
extra_positions = len(str(option[0]))
possible_rows = list(range(max(0, row_option-1), min(row_option+2, len(lines))))
possible_columns = list(range(max(0, col_option-1), min(col_option+extra_positions+1, len(lines[0]))))
combinations = list(product(possible_rows, possible_columns))
checked = False
for combination in combinations:
value = lines[combination[0]][combination[1]]
if value.isdigit():
pos_numbers.append((combination[0], combination[1]))
checked = True
visited_numbers = []
final_numbers = []
for row, col in pos_numbers:
first_col = col
last_col = col
if (row, col) not in visited_numbers:
while lines[row][first_col].isdigit() and first_col >= 0:
visited_numbers.append((row, first_col))
first_col = first_col - 1
try:
while lines[row][last_col].isdigit() and last_col < 140:
visited_numbers.append((row, last_col))
last_col = last_col + 1
# print(last_col)
except:
pass
final_numbers.append(int(lines[row][first_col+1:last_col]))
print(sum(final_numbers))