You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.5 KiB
41 lines
1.5 KiB
lines = open('inputs/day1.txt').readlines()
|
|
digit_names = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
|
|
replaced_names = ['o1e', 't2o', 't3e', 'f4r', 'f5e', 's6x', 's7n', 'e8h', 'n9e']
|
|
|
|
def digits(lines: list[str]) -> list[int]:
|
|
dgts = []
|
|
for line in lines:
|
|
numbers = ''
|
|
for char in line:
|
|
if char.isdigit():
|
|
numbers += char
|
|
break
|
|
for char in line[::-1]:
|
|
if char.isdigit():
|
|
numbers += char
|
|
break
|
|
dgts.append(int(numbers))
|
|
return dgts
|
|
|
|
def transform_digits(lines: list[str]) -> list[str]:
|
|
newlines = []
|
|
for line in lines:
|
|
indices = {}
|
|
for idx, c in enumerate(digit_names):
|
|
c_loc = line.find(c)
|
|
if c_loc != -1:
|
|
indices[str(c_loc)] = str(idx+1)
|
|
if len(indices) == 0:
|
|
newlines.append(line)
|
|
else:
|
|
first_index = sorted(indices)[0]
|
|
first_number = replaced_names[int(indices[first_index])-1]
|
|
first_digit_name = digit_names[int(indices[first_index])-1]
|
|
second_index = sorted(indices)[-1]
|
|
second_number = replaced_names[int(indices[second_index])-1]
|
|
second_digit_name = digit_names[int(indices[second_index])-1]
|
|
newlines.append(line.replace(first_digit_name, first_number).replace(second_digit_name, second_number))
|
|
return newlines
|
|
|
|
print(f'Part 1 Solution = {sum(digits(lines))}')
|
|
print(f'Part 2 Solution = {sum(digits(transform_digits(lines)))}') |