Advertisement
Lyuben_Andreev

AdventOfCodeDay3Part2

Oct 10th, 2024 (edited)
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.37 KB | Software | 0 0
  1. import re
  2. from operator import mul
  3.  
  4. def part2(puzzle_input):
  5.     lines = puzzle_input.split('\n')
  6.     print(lines)
  7.  
  8.     # Регулярно изражение за намиране на звездички (*)
  9.     gear_regex = r'\*'
  10.     gears = dict()
  11.     for i, line in enumerate(lines):
  12.         for m in re.finditer(gear_regex, line):
  13.             gears[(i, m.start())] = []
  14.  
  15.     # Регулярно изражение за намиране на числа
  16.     number_regex = r'\d+'
  17.     for i, line in enumerate(lines):
  18.         for m in re.finditer(number_regex, line):
  19.             # Проверка на съседните позиции за числа
  20.             for r in range(max(0, i - 1), min(len(lines), i + 2)):
  21.                 for c in range(max(0, m.start() - 1), min(len(line), m.end() + 1)):
  22.                     if (r, c) in gears:
  23.                         gears[(r, c)].append(int(m.group()))
  24.  
  25.     gear_ratio_sum = 0
  26.     for nums in gears.values():
  27.         # Ако има точно две числа, изчисляваме съотношението на зъбното колело
  28.         if len(nums) == 2:
  29.             gear_ratio_sum += mul(*nums)
  30.  
  31.     return gear_ratio_sum
  32.  
  33.  
  34. # Четене на входните данни от файл
  35. with open('puzzle.txt', 'r') as f:
  36.     puzzle_input = f.read()
  37.  
  38. print('Part 2:', part2(puzzle_input))
  39.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement