This commit is contained in:
@@ -1,7 +1,36 @@
|
||||
from collections import defaultdict
|
||||
from typing import Any, Iterator
|
||||
|
||||
from ..base import BaseSolver
|
||||
from ..tools.graphs import iter_max_cliques
|
||||
|
||||
|
||||
class Solver(BaseSolver):
|
||||
def solve(self, input: str) -> Iterator[Any]: ...
|
||||
def solve(self, input: str) -> Iterator[Any]:
|
||||
connections: dict[str, set[str]] = defaultdict(set)
|
||||
for row in input.splitlines():
|
||||
src, dst = row.split("-")
|
||||
connections[src].add(dst)
|
||||
connections[dst].add(src)
|
||||
|
||||
if self.files:
|
||||
content = "graph G {\n"
|
||||
for row in input.splitlines():
|
||||
src, dst = row.split("-")
|
||||
content += f"{src} -- {dst}\n"
|
||||
content += "}"
|
||||
self.files.create("graph.dot", content.encode(), False)
|
||||
|
||||
cliques: set[frozenset[str]] = set()
|
||||
|
||||
for node1, neighbors in connections.items():
|
||||
for node2 in neighbors:
|
||||
for node3 in connections[node2].intersection(neighbors):
|
||||
cliques.add(frozenset({node1, node2, node3}))
|
||||
|
||||
self.logger.info(f"found {len(cliques)} cliques of size 3")
|
||||
yield sum(any(node.startswith("t") for node in clique) for clique in cliques)
|
||||
|
||||
# clique = max(nx.algorithms.clique.find_cliques(G), key=len)
|
||||
clique = max(iter_max_cliques(connections), key=len)
|
||||
yield ",".join(sorted(clique))
|
||||
|
||||
Reference in New Issue
Block a user