this repo has no description
at master 2.2 kB view raw
1<!-- livebook:{"persist_outputs":true} --> 2 3# Day 11 4 5```elixir 6Mix.install([:kino_aoc]) 7``` 8 9## Section 10 11<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiIxMSIsInNlc3Npb25fc2VjcmV0IjoiQURWRU5UX09GX0NPREVfU0VTU0lPTiIsInllYXIiOiIyMDI0In0","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 12 13```elixir 14{:ok, puzzle_input} = 15 KinoAOC.download_puzzle("2024", "11", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 16``` 17 18<!-- livebook:{"output":true} --> 19 20``` 21{:ok, "554735 45401 8434 0 188 7487525 77 7"} 22``` 23 24```elixir 25# puzzle_input = "125 17" 26 27stones = 28 puzzle_input 29 |> String.split() 30 |> Enum.map(&String.to_integer/1) 31 |> Enum.frequencies() 32``` 33 34<!-- livebook:{"output":true} --> 35 36``` 37%{0 => 1, 7 => 1, 77 => 1, 188 => 1, 8434 => 1, 45401 => 1, 554735 => 1, 7487525 => 1} 38``` 39 40```elixir 41defmodule Stones do 42 def blink(list), do: Enum.reduce(list, %{}, &alter/2) 43 44 defp alter({0, count}, map), do: update(map, 1, count) 45 46 defp alter({n, count}, map) do 47 len = len(n) 48 49 if rem(len, 2) == 0 do 50 half = 10 ** div(len, 2) 51 52 map 53 |> update(div(n, half), count) 54 |> update(rem(n, half), count) 55 else 56 update(map, n * 2024, count) 57 end 58 end 59 60 defp len(n) when n < 10, do: 1 61 defp len(n) when n < 100, do: 2 62 defp len(n) when n < 1000, do: 3 63 defp len(n) when n < 10000, do: 4 64 defp len(n), do: ceil(:math.log10(n)) 65 66 defp update(map, key, val), do: Map.update(map, key, val, &(&1 + val)) 67end 68``` 69 70<!-- livebook:{"output":true} --> 71 72``` 73{:module, Stones, <<70, 79, 82, 49, 0, 0, 11, ...>>, {:update, 3}} 74``` 75 76## Part 1 77 78```elixir 791..25 80|> Enum.reduce(stones, fn _, acc -> 81 Stones.blink(acc) 82end) 83|> Map.values() 84|> Enum.sum() 85``` 86 87<!-- livebook:{"output":true} --> 88 89``` 90209412 91``` 92 93## Part 2 94 95```elixir 961..75 97|> Enum.reduce(stones, fn _, acc -> 98 Stones.blink(acc) 99end) 100|> Map.values() 101|> Enum.sum() 102``` 103 104<!-- livebook:{"output":true} --> 105 106``` 107248967696501656 108``` 109 110<!-- livebook:{"offset":1963,"stamp":{"token":"XCP.YCGtDQl3XNWJm5oY1OPI2QDRB7EIjZxBmwK3eswS1ryD28kg8fS_fKGIFJGFbtL1NL7wYrv2ADW60yeAZnCv5KbDelUm_bxkPN4_K56iTJ1toOGfIRYlo2lj5beAjrmbhRw","version":2}} -->