diff --git a/python/Day 3/main.py b/python/Day 3/main.py index 98774dc..fba7a9e 100644 --- a/python/Day 3/main.py +++ b/python/Day 3/main.py @@ -1,7 +1,9 @@ from io import open import re import numpy as np +from itertools import product +#Hay algo mal y no sé qué es # We open the txt document containing the games input=open('input.txt','r') @@ -16,7 +18,7 @@ symbols=[] matches=[] list_text=[] -#Eliminamos los números y los puntos para obtener los dígitos diferentes/símbolos que hay +#Eliminamos los números y los puntos para obtener los símbolos que hay numbers=[] for i in range(0,10): numbers.append(str(i)) @@ -35,8 +37,44 @@ for position,line in enumerate(text): del(list_text[position][-1]) for symbol in symbols: try: - #print(symbol,position,texto[position].index(symbol)) + #print(symbol,position,text[position].index(symbol)) find=position,list_text[position].index(symbol) matches.append(find) except ValueError: - pass \ No newline at end of file + pass + +#Identificamos las posiciones alrededor del símbolo que tiene números y los guardamos en una variable que se llama position_numbers=[] +position_numbers=[] +for symbol in matches: + row_option=symbol[0] + column_option=symbol[1] + extra_positions = len(str(symbol[0])) + #iteramos las posiciones que están alrededor del símbolo mediante iteración + posible_rows=list(range(max(0,row_option-1),min(row_option+2,len(text)))) #+2 porque el range no incluye el último número, len(text)=número filas máxima + posible_columns=list(range(max(0,column_option-1),min(column_option+extra_positions+1,len(text)))) + #Guardamos las posiciones de los números que rodean a los simbolos + combinations_numbers=list(product(posible_rows,posible_columns)) + for number in combinations_numbers: + value=text[number[0]][number[1]] + if value.isdigit(): + position_numbers.append((number[0],number[1])) + +#Una vez tenemos los dígitos que rodean a los simbolos hay que ver si tienen números adyacentes a estos para agrupar los números +visit_numbers=[] +final_numbers=[] +for row,column in position_numbers: + first_col=column + last_col=column + if (row,column) not in visit_numbers: + while text[row][first_col].isdigit() and first_col >= 0: + visit_numbers.append((row, first_col)) + first_col = first_col - 1 + try: + while text[row][last_col].isdigit() and last_col < len(text): + visit_numbers.append((row, last_col)) + last_col = last_col + 1 + except: + pass + final_numbers.append(int(text[row][first_col+1:last_col])) + +print(sum(final_numbers)) \ No newline at end of file diff --git a/python/Day 3/main2.py b/python/Day 3/main2.py new file mode 100644 index 0000000..8a4525d --- /dev/null +++ b/python/Day 3/main2.py @@ -0,0 +1,62 @@ +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)) \ No newline at end of file