advent24-llm / day23 /solution_claude-3-5-sonnet-20241022.py
jerpint's picture
Add solution files
a4da721
raw
history blame
1.64 kB
from collections import defaultdict
from itertools import combinations
def parse_input(file):
connections = defaultdict(set)
with open(file, 'r') as f:
for line in f:
a, b = line.strip().split('-')
connections[a].add(b)
connections[b].add(a)
return connections
def find_triplets(connections):
computers = list(connections.keys())
triplets = []
for a, b, c in combinations(computers, 3):
if (b in connections[a] and
c in connections[a] and
c in connections[b]):
triplets.append((a, b, c))
return triplets
def count_t_triplets(triplets):
count = 0
for triplet in triplets:
if any(comp.startswith('t') for comp in triplet):
count += 1
return count
def find_largest_clique(connections):
computers = list(connections.keys())
n = len(computers)
max_clique = []
# Try all possible combinations, starting from largest
for size in range(n, 0, -1):
for combo in combinations(computers, size):
# Check if all computers in combo are connected to each other
is_clique = all(
all(b in connections[a] for b in combo if b != a)
for a in combo
)
if is_clique:
return sorted(combo)
return max_clique
# Part 1
connections = parse_input("input.txt")
triplets = find_triplets(connections)
result1 = str(count_t_triplets(triplets))
print(result1)
# Part 2
largest_clique = find_largest_clique(connections)
result2 = ','.join(largest_clique)
print(result2)