diff --git a/2023/Day-03/day03-1.py b/2023/Day-03/day03-1.py new file mode 100755 index 0000000..f748645 --- /dev/null +++ b/2023/Day-03/day03-1.py @@ -0,0 +1,47 @@ +#!/usr/bin/python3 + +import re + +def main(): + with open('input.txt', 'r') as input_file: + lines = input_file.readlines() + lines = [line.strip() for line in lines] + + part_numbers = [] + + for y in range(len(lines)): + for digit in re.finditer(r'\d+', lines[y]): + part_number = 0 + if(lines[y][digit.span()[0] - 1] != '.' + and not lines[y][digit.span()[0] - 1].isdigit()): + part_number = digit.group() + part_numbers.append(int(part_number)) + continue + try: + if(lines[y][digit.span()[1]] != '.' + and not lines[y][digit.span()[1]].isdigit()): + part_number = digit.group() + part_numbers.append(int(part_number)) + continue + except: + pass + for char in range(digit.span()[0] - 1, digit.span()[1] + 1): + try: + if lines[y-1][char] != '.' and not lines[y-1][char].isdigit(): + part_number = digit.group() + part_numbers.append(int(part_number)) + continue + except: + pass + try: + if lines[y+1][char] != '.' and not lines[y+1][char].isdigit(): + part_number = digit.group() + part_numbers.append(int(part_number)) + continue + except: + pass + + print(sum(part_numbers)) + +if __name__ == '__main__': + main() diff --git a/2023/Day-03/day03-2.py b/2023/Day-03/day03-2.py new file mode 100755 index 0000000..8931491 --- /dev/null +++ b/2023/Day-03/day03-2.py @@ -0,0 +1,42 @@ +#!/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()