Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re
- from operator import mul
- def part2(puzzle_input):
- lines = puzzle_input.split('\n')
- print(lines)
- # Регулярно изражение за намиране на звездички (*)
- gear_regex = r'\*'
- gears = dict()
- for i, line in enumerate(lines):
- for m in re.finditer(gear_regex, line):
- gears[(i, m.start())] = []
- # Регулярно изражение за намиране на числа
- number_regex = r'\d+'
- for i, line in enumerate(lines):
- for m in re.finditer(number_regex, line):
- # Проверка на съседните позиции за числа
- for r in range(max(0, i - 1), min(len(lines), i + 2)):
- for c in range(max(0, m.start() - 1), min(len(line), m.end() + 1)):
- if (r, c) in gears:
- gears[(r, c)].append(int(m.group()))
- gear_ratio_sum = 0
- for nums in gears.values():
- # Ако има точно две числа, изчисляваме съотношението на зъбното колело
- if len(nums) == 2:
- gear_ratio_sum += mul(*nums)
- return gear_ratio_sum
- # Четене на входните данни от файл
- with open('puzzle.txt', 'r') as f:
- puzzle_input = f.read()
- print('Part 2:', part2(puzzle_input))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement