comments
This commit is contained in:
parent
d97c512816
commit
7f47fd46ad
@ -8,6 +8,11 @@ from collections import defaultdict
|
||||
SYMBOLS="*%@#+-/$=&"
|
||||
|
||||
def get_all_numbers_and_starting_coords(mat):
|
||||
"""
|
||||
for a coordinate, walks right until it encounters a non digit,
|
||||
when it does, it adds that number string to a collection,
|
||||
and starts over, walking right until it continues to next row
|
||||
"""
|
||||
nums = []
|
||||
for y, row in enumerate(mat):
|
||||
x = 0
|
||||
@ -21,11 +26,22 @@ def get_all_numbers_and_starting_coords(mat):
|
||||
return nums
|
||||
|
||||
def get_row_coords(x1, y, length):
|
||||
"""
|
||||
for a given x,y point, it just creates the rest of the x/y coords to the right of this coord for a run
|
||||
"""
|
||||
coords = []
|
||||
for x in range(x1, x1+length):
|
||||
coords.append((x,y))
|
||||
return coords
|
||||
|
||||
def process_number(mx, coords, num):
|
||||
line_coords = get_row_coords(*coords, len(num))
|
||||
for coord in line_coords:
|
||||
any_symbols = [(cs, v) for cs,v in matrix.get_neighbor_coords(mx, *coord) if v in SYMBOLS]
|
||||
if any_symbols:
|
||||
return True, any_symbols[0]
|
||||
return False, None
|
||||
|
||||
# @shared.profile
|
||||
def part1(mat):
|
||||
choose = []
|
||||
@ -40,15 +56,6 @@ def part1(mat):
|
||||
print(total)
|
||||
|
||||
|
||||
def process_number(mx, coords, num):
|
||||
line_coords = get_row_coords(*coords, len(num))
|
||||
for coord in line_coords:
|
||||
any_symbols = [(cs, v) for cs,v in matrix.get_neighbor_coords(mx, *coord) if v in SYMBOLS]
|
||||
if any_symbols:
|
||||
return True, any_symbols[0]
|
||||
return False, None
|
||||
|
||||
|
||||
# @shared.profile
|
||||
def part2(mat):
|
||||
splats = matrix.find_in_matrix(mat, "*", False)
|
||||
@ -60,6 +67,7 @@ def part2(mat):
|
||||
valid, sc = process_number(mat, coords, num)
|
||||
if valid:
|
||||
symbols[(sc[0]['r'],sc[0]['c'])].append(num)
|
||||
|
||||
total = 0
|
||||
for splat in splats:
|
||||
neighbors = symbols[splat]
|
||||
|
Loading…
Reference in New Issue
Block a user