🏡 index : ~doyle/aoc.git

author Jordan Doyle <jordan@doyle.la> 2024-12-29 21:27:02.0 +07:00:00
committer Jordan Doyle <jordan@doyle.la> 2024-12-29 21:27:02.0 +07:00:00
commit
47b8fbbdd150f54c527f560e2b7c54a5b2f2c5aa [patch]
tree
606105f60422c7d60feaeb51a0befae8cc19169f
parent
9bad216310206d12bd4413f6619e2ff8d855c2ea
download
47b8fbbdd150f54c527f560e2b7c54a5b2f2c5aa.tar.gz

Add 2024 day 23



Diff

 README      |  4 ++--
 treefmt.nix |  1 +
 2024/23.py  | 31 +++++++++++++++++++++++++++++++
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/README b/README
index 408ff2e..fc532e3 100644
--- a/README
+++ a/README
@@ -36,7 +36,7 @@
|       20 | Rust     | |       20 | Haskell  |
|       21 | Rust     | |       21 | Rust     |
|       22 | Rust     | |       22 | Haskell  |
+---------------------+ |       23 | Haskell  |
                        |       24 | Haskell  |
|       23 | Python   | |       23 | Haskell  |
+---------------------+ |       24 | Haskell  |
                        |       25 | Bash     |
                        +---------------------+
diff --git a/treefmt.nix b/treefmt.nix
index eaf485c..900aa61 100644
--- a/treefmt.nix
+++ a/treefmt.nix
@@ -1,8 +1,9 @@
{ pkgs, ... }:
{
  projectRootFile = "flake.nix";

  programs = {
    black.enable = true;
    hlint.enable = true;
    ormolu.enable = true;
    nixpkgs-fmt.enable = true;
diff --git a/2024/23.py b/2024/23.py
new file mode 100755
index 0000000..d768cda 100755
--- /dev/null
+++ a/2024/23.py
@@ -1,0 +1,31 @@
#! /usr/bin/env nix-shell
#! nix-shell -i python3 -p python3Packages.pillow python3Packages.networkx

import sys
import networkx as nx

input = [line.strip().split("-") for line in sys.stdin]

nodes = set([node for pair in input for node in pair])
k_nodes = [node for node in nodes if node.startswith("t")]

G = nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(input)

cliques = list(nx.enumerate_all_cliques(G))

part1 = 0

for clique in cliques:
    if len(clique) < 3:
        continue
    elif len(clique) > 3:
        break
    elif any(node in k_nodes for node in clique):
        part1 += 1

print(part1)

part2 = ",".join(sorted(cliques[-1]))
print(part2)