275 tokens in Python for part 1 by LiquidFun
Download solution
fromcollectionsimportdefaultdict
lines=open(0).read().splitlines()
gear_to_num=defaultdict(list)
s1=0
is_valid=lambday,x:0<=y<len(lines)and0<=x<len(lines[0])
foryinrange(len(lines)):
forx_startinrange(len(lines[y])):
x_end=x_start
iflines[y][x_start].isdigit()and(notis_valid(y,x_start-1)ornotlines[y][x_start-1].isdigit()):
whileis_valid(y,x_end+1)andlines[y][x_end+1].isdigit():
x_end+=1
good=False
forydinrange(y-1,y+2):
forxdinrange(x_start-1,x_end+2):
ifis_valid(yd,xd)andlines[yd][xd]notin'.0123456789':
good=True
iflines[yd][xd]in'*':
gear_to_num[(yd,xd)].append(int(lines[y][x_start:x_end+1]))
s1+=good*int(lines[y][x_start:x_end+1])
print(s1)