2023 Day 3
This commit is contained in:
47
2023/Day-03/day03-1.py
Executable file
47
2023/Day-03/day03-1.py
Executable 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
42
2023/Day-03/day03-2.py
Executable 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()
|
Reference in New Issue
Block a user