The quickest day for me until now, which is surprising for day 11/12:
defmodule Y2025.D11 do
use Day, input: "2025/11", part1: ~c"l", part2: ~c"l"
defp part1(input) do
input
|> parse_input()
|> count("you", "out")
end
defp part2(input) do
map = parse_input(input)
dac_fft = count(map, "svr", "dac") * count(map, "dac", "fft") * count(map, "fft", "out")
fft_dac = count(map, "svr", "fft") * count(map, "fft", "dac") * count(map, "dac", "out")
dac_fft + fft_dac
end
defp count(_, to, to), do: 1
defp count(map, from, to) do
Performance.memoize({from, to}, fn ->
map
|> Map.get(from, [])
|> Enum.map(&count(map, &1, to))
|> Enum.sum()
end)
end
defp parse_input(input) do
input
|> Enum.map(&parse_line/1)
|> Map.new()
end
defp parse_line(<<from::bytes-size(3), ": ", to::binary>>), do: {from, Utils.splitrim(to, " ")}
end
Pretty similar to the solutions above, except that I use my Performance.memoize helper instead of the usual cache/memo Map. I takes ~5ms to run on my machine for part 2.






















