#advent of code 2024 #day 10 #tbh I don't think I even understood the task correctly #but the first idea for part 2 #that came up to my head worked so i'll take it #all I did was switch a set into a list #rewritten so the code does both parts now grid = {}; xMin, yMin, xMax, yMax = 0,0,0,0; dirs = [(1,0),(-1,0),(0,1),(0,-1)]; starts = []; f = open("10.in","r"); for y,l in enumerate(f): yMax = max(y,yMax); for x,c in enumerate(l.strip()): grid[(x,y)]=int(c); if c == "0": starts.append((x,y)); xMax = max(xMax,x); f.close(); def getAdjacent(pos,h): adj = []; xp, yp = pos; for i,d in enumerate(dirs): dx,dy = d; if grid.get((xp+dx,yp+dy),-1)-h == 1: adj.append((xp+dx,yp+dy,i)); return adj; def pathfinding(starts): score1 = 0; score2 = 0; for start in starts: subscore1 = set(); subscore2 = list(); x0,y0 = start; queue = [(x0,y0,0)]; while queue: px,py,pd = queue.pop(); CurrentHeight = grid.get((px,py),-1); if CurrentHeight == 9: subscore1.add((px,py)); subscore2.append((px,py,pd)); else: NextValid = getAdjacent((px,py),CurrentHeight); queue.extend(NextValid); score1 += len(subscore1); score2 += len(subscore2); return score1, score2; part1, part2 = pathfinding(starts); print("part 1 =", part1); print("part 2 =", part2);