My Python solution for part 1 and part 2. I really practice my regex skills.
spoiler
#!/usr/bin/python3
import re
value_re = '(\d+)'
symbol_re = '[^\d.]'
gear_re = '(\*)'
def main():
input = list()
with open("input.txt", 'r') as in_file:
for line in in_file:
input.append(line.strip('\n'))
length = len(input)
width = len(input[0])
value_sum = 0
for idx, line in enumerate(input):
for match in re.finditer(value_re, line):
for line_mask in input[max(idx - 1, 0):min(idx + 2, length)]:
valid_chars = line_mask[max(match.span()[0] - 1, 0):min(match.span()[1] + 1, width)]
if re.search(symbol_re, valid_chars):
value_sum += int(match[0])
break
print(f"Value sum = {value_sum}")
gear_ratio = 0
for idx, line in enumerate(input):
for match in re.finditer(gear_re, line):
valid_lines = input[max(idx - 1, 0):min(idx + 2, length)]
min_range = max(match.span()[0] - 1, 0)
max_range = min(match.span()[1], width)
num_of_adjacent = 0
temp_gear_ratio = 1
for valid_line in valid_lines:
for match in re.finditer(value_re, valid_line):
if match.span()[0] in range(min_range,max_range + 1) or match.span()[1] - 1 in range(min_range,max_range + 1):
num_of_adjacent += 1
temp_gear_ratio *= int(match[0])
if num_of_adjacent == 2:
gear_ratio += temp_gear_ratio
print(f"Gear ratio = {gear_ratio}")
if __name__ == '__main__':
main()
Second best season after season 2.
I really liked the cast for the characters, espilecially Jon Hamm and Jennifer Jason Leigh.
I felt it was back to basics (Fargo wise) after season 4 which I found a bit out of order.