diff --git a/2023/day03/example2.txt b/2023/day03/example2.txt new file mode 100644 index 0000000..624ea4f --- /dev/null +++ b/2023/day03/example2.txt @@ -0,0 +1,10 @@ +467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.. \ No newline at end of file diff --git a/2023/day03/src/part2.py b/2023/day03/src/part2.py new file mode 100644 index 0000000..017e6dc --- /dev/null +++ b/2023/day03/src/part2.py @@ -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) \ No newline at end of file