From ecbbff549743cfb285ffbad426d8ce1a5ce04424 Mon Sep 17 00:00:00 2001 From: Ɓukasz Jan Niemier Date: Wed, 11 Dec 2024 12:43:21 +0000 Subject: [PATCH] 2024 day 11 --- 2024/day11.livemd | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file(s) changed, 110 insertion(s)(+), 0 deletion(s)(-) diff --git a/2024/day11.livemd b/2024/day11.livemd new file mode 100644 --- /dev/null +++ b/2024/day11.livemd @@ -0,0 +1,110 @@ + + +# Day 11 + +```elixir +Mix.install([:kino_aoc]) +``` + +## Section + + + +```elixir +{:ok, puzzle_input} = + KinoAOC.download_puzzle("2024", "11", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) +``` + + + +``` +{:ok, "554735 45401 8434 0 188 7487525 77 7"} +``` + +```elixir +# puzzle_input = "125 17" + +stones = + puzzle_input + |> String.split() + |> Enum.map(&String.to_integer/1) + |> Enum.frequencies() +``` + + + +``` +%{0 => 1, 7 => 1, 77 => 1, 188 => 1, 8434 => 1, 45401 => 1, 554735 => 1, 7487525 => 1} +``` + +```elixir +defmodule Stones do + def blink(list), do: Enum.reduce(list, %{}, &alter/2) + + defp alter({0, count}, map), do: update(map, 1, count) + + defp alter({n, count}, map) do + len = len(n) + + if rem(len, 2) == 0 do + half = 10 ** div(len, 2) + + map + |> update(div(n, half), count) + |> update(rem(n, half), count) + else + update(map, n * 2024, count) + end + end + + defp len(n) when n < 10, do: 1 + defp len(n) when n < 100, do: 2 + defp len(n) when n < 1000, do: 3 + defp len(n) when n < 10000, do: 4 + defp len(n), do: ceil(:math.log10(n)) + + defp update(map, key, val), do: Map.update(map, key, val, &(&1 + val)) +end +``` + + + +``` +{:module, Stones, <<70, 79, 82, 49, 0, 0, 11, ...>>, {:update, 3}} +``` + +## Part 1 + +```elixir +1..25 +|> Enum.reduce(stones, fn _, acc -> + Stones.blink(acc) +end) +|> Map.values() +|> Enum.sum() +``` + + + +``` +209412 +``` + +## Part 2 + +```elixir +1..75 +|> Enum.reduce(stones, fn _, acc -> + Stones.blink(acc) +end) +|> Map.values() +|> Enum.sum() +``` + + + +``` +248967696501656 +``` + + -- tangled.sh