From ed395fe7a7fd68f6db4ea94de8fdcdcb0fac5179 Mon Sep 17 00:00:00 2001 From: bthink Date: Sun, 7 Dec 2025 15:59:37 +0100 Subject: first week of AOC 2025 --- 2025/aoc2025-d07.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 2025/aoc2025-d07.py (limited to '2025/aoc2025-d07.py') diff --git a/2025/aoc2025-d07.py b/2025/aoc2025-d07.py new file mode 100644 index 0000000..e72effe --- /dev/null +++ b/2025/aoc2025-d07.py @@ -0,0 +1,56 @@ +#advent of code 2025 +#day 07 +part1=0; +part2=0; +#parsing +grid=dict(); +Ymax=0; +Xmax=0; +PuzzleInput=open("07.in","r"); +for y,line in enumerate(PuzzleInput): + Ymax+=1; + for x,c in enumerate(line.replace("\n","")): + grid[(x,y)]=c; + Xmax=max(Xmax,x+1); + if c=="S": + Start=(x,y); + grid[(x,y)]="."; +PuzzleInput.close(); +#solution +total=(0,0); +pathing=dict(); +pathing[total]=set(); +hitBottom=dict(); +splitters=set(); #encountered splitters +beams=set([(Start,total)]); +#recursive search +def findTimelines(point): + if point in hitBottom: + return hitBottom[point]; + hitBottom[point]=0; + for path in pathing[point]: + hitBottom[point]+=findTimelines(path); + return hitBottom[point]; + +for step in range(0,Ymax+1,2): #every 2nd line is empty so i'm skipping it + newbeams=set(); + while beams: + b,prev=beams.pop(); + pathing[prev].add(b); + if b not in pathing: pathing[b]=set(); + bx,by=b; + beam=(bx,by+2); + if grid.get(beam,".")=="^": + splitters.add(beam); + newbeams.add(((bx+1,by+2),(bx,by))); + newbeams.add(((bx-1,by+2),(bx,by))); + else: + newbeams.add(((bx,by+2),(bx,by))); + if by+2>Ymax and b not in hitBottom: + hitBottom[b]=1; #register from which points beams hit the bottom + beams=newbeams; + +part1=len(splitters); +part2=findTimelines(Start); +print("part 1",part1,part1==1533); +print("part 2",part2,part2==10733529153890); -- cgit v1.2.3