Add initial input data for Day 11 of 2025 challenge

This commit is contained in:
Samuel Enocsson
2025-12-11 08:47:55 +01:00
parent 1449ba79f0
commit a2353956d8
4 changed files with 1007 additions and 0 deletions
+63
View File
@@ -0,0 +1,63 @@
"""Day 11: Advent of Code 2025."""
import time
from collections import defaultdict
from aoc import read_lines
def build_graph(data: list[str]) -> dict[str, set[str]]:
"""Build graph from input: 'fxp: udl vii hgb qmy' -> adjacency dict."""
graph = defaultdict(set)
for line in data:
node, neighbors = line.split(': ')
for neighbor in neighbors.split():
graph[node].add(neighbor)
return graph
def count_paths(node, target, graph, memo={}):
if node == target:
return 1
if node in memo:
return memo[node]
total = 0
for neighbor in graph[node]:
total += count_paths(neighbor, target, graph, memo)
memo[node] = total
return total
def part1(data):
"""Solve part 1."""
graph = build_graph(data)
count = count_paths("you", "out", graph)
return count
def part2(data):
"""Solve part 2."""
graph = build_graph(data)
c1 = count_paths("svr", "dac", graph, {})
c2 = count_paths("dac", "fft", graph, {})
c3 = count_paths("fft", "out", graph, {})
c4 = count_paths("svr", "fft", graph, {})
c5 = count_paths("fft", "dac", graph, {})
c6 = count_paths("dac", "out", graph, {})
return (c1 * c2* c3) + (c4*c5*c6)
if __name__ == "__main__":
DAY = 11
data = read_lines(DAY)
t0 = time.perf_counter()
p1 = part1(data)
t1 = time.perf_counter()
print(f"Part 1: {p1} ({(t1-t0)*1000:.2f} ms)")
t0 = time.perf_counter()
p2 = part2(data)
t1 = time.perf_counter()
print(f"Part 2: {p2} ({(t1-t0)*1000:.2f} ms)")