2023 Day 3

This commit is contained in:
2023-12-03 09:14:51 +00:00
parent 35c49b83bd
commit 1077a375c7
2 changed files with 89 additions and 0 deletions

47
2023/Day-03/day03-1.py Executable file
View File

@@ -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()

42
2023/Day-03/day03-2.py Executable file
View File

@@ -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()