2024 day 23.
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Mikaël Capelle
2024-12-23 11:35:42 +01:00
parent b9341bdecc
commit 77b24dd148
4 changed files with 3511 additions and 2 deletions

View File

@@ -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))