Advertisement
globmont

AoC 21-12

Dec 12th, 2021
597
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.39 KB | None | 0 0
  1. file = "inputs/2021/12/data.txt"
  2.  
  3. nodes = set()
  4. adjacency_list = dict()
  5. with open(file, "r") as f:
  6.     lines = f.read().split("\n")
  7.     for connection in lines:
  8.         src, dst = connection.split("-")
  9.         nodes.add(src)
  10.         nodes.add(dst)
  11.         adjacency_list[src] = adjacency_list.get(src, set())
  12.         adjacency_list[dst] = adjacency_list.get(dst, set())
  13.        
  14.         adjacency_list[src].add(dst)
  15.         adjacency_list[dst].add(src)
  16.        
  17. def is_large_cave(cave_name: str) -> bool:
  18.     return cave_name == cave_name.upper()
  19.  
  20. def pathfind(start, end, progress, small_doubled):
  21.     if start == end:
  22.         return [progress + [end]]
  23.    
  24.     sub_paths = []
  25.     for neighbor in adjacency_list[start]:
  26.         if neighbor == start or neighbor == "start":
  27.             continue
  28.         if neighbor in progress and not is_large_cave(neighbor):
  29.             if small_doubled:
  30.                 continue
  31.             else:
  32.                 sub_paths.extend(
  33.                     pathfind(neighbor, end, progress + [start], True)
  34.                 )
  35.                 continue
  36.         sub_paths.extend(
  37.             pathfind(neighbor, end, progress + [start], small_doubled)
  38.         )
  39.     return sub_paths
  40.        
  41. part_1 = pathfind("start", "end", [], True)
  42. print(f"Part 1: {len(part_1):,d}")        
  43.  
  44. part_2 = pathfind("start", "end", [], False)
  45. print(f"Part 2: {len(part_2):,d}")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement