add: part2

This commit is contained in:
starnakin 2023-12-03 08:25:43 +01:00
parent 8eded1bfe8
commit feb5cdd844
2 changed files with 61 additions and 0 deletions

10
2023/day03/example2.txt Normal file
View File

@ -0,0 +1,10 @@
467..114..
...*......
..35..633.
......#...
617*......
.....+.58.
..592.....
......755.
...$.*....
.664.598..

51
2023/day03/src/part2.py Normal file
View File

@ -0,0 +1,51 @@
text: str = open("input.txt", "r").read()
import math
value: int = 0;
def get_pos_of_digits_around(lst: list[str], x:int, y:int):
start_x = x - (x > 0)
start_y = y - (y > 0)
stop_x = x + (x < len(lst[y]) - 1)
stop_y = y + (y < len(lst) - 1)
lst_pos = []
for y, line in enumerate(lst[start_y:stop_y + 1]):
line = line[start_x:stop_x + 1]
for x, char in enumerate(line):
if (char.isdigit() and not (x > 0 and line[x - 1].isdigit())):
lst_pos.append((start_x + x, start_y + y))
return (lst_pos)
def get_numbers_by_pos(lst: [str], lst_pos: [(int, int)]):
lst_number = []
for x, y in lst_pos:
start: int = x
while (start > 0 and lst[y][start - 1].isdigit()):
start -= 1
stop: int = x
while (stop < len(lst[y]) and lst[y][stop].isdigit()):
stop += 1
print(lst[y][start:stop])
lst_number.append(int(lst[y][start:stop]))
print(f"example2.txt:{y + 1}:{x + 1}")
return lst_number
lst_text: [str] = text.split("\n")
for y, line in enumerate(lst_text):
for x, char in enumerate(line):
if (char == "*"):
lst = get_pos_of_digits_around(lst_text, x, y)
if (len(lst) != 2):
continue
lst = get_numbers_by_pos(lst_text, lst)
print(lst)
value += math.prod(lst)
print(value)