DEV Community

Viper
Viper

Posted on

Advent of Code 2021 Python Solution: Day 12

Due to work I was unable to solve it on time and thus I had to take help from here.

Solution

data,data1 = get_data(day=12)

class Solver:
    def __init__(self, data):
        self.paths = {}
        self.data = data
        self.visited = set()

        self.prepare_paths()
        print(self.solve(part="1"))
        print(self.solve(part="2"))

    def prepare_paths(self):
        for d in self.data:
            l,r = d.split("-")
            if self.paths.get(l):
                self.paths[l].append(r)
            else:
                self.paths[l] = [r]
            if self.paths.get(r):
                self.paths[r].append(l)
            else:
                self.paths[r]=[l]

    def solve(self, curr_cave="start", part="1"):
        if (curr_cave=="end"):
            return 1
        if curr_cave.islower():
            self.visited.add(curr_cave)

        ways_count = sum([self.solve(cave, part) for cave in self.paths[curr_cave] if cave not in self.visited])
        ways_count += 0 if part!="2" else sum([self.solve(cave, cave) for cave in self.paths[curr_cave] if cave in self.visited and cave != "start"])

        if (curr_cave != part): self.visited.discard(curr_cave)
        return ways_count

s = Solver(data1)
Enter fullscreen mode Exit fullscreen mode

Search either BFS or DFS comes into the aid.

Why not read more?

Discussion (0)