this repo has no description

2024 day 11

hauleth.dev ecbbff54 987d2410

verified
+110
+110
2024/day11.livemd
··· 1 + <!-- livebook:{"persist_outputs":true} --> 2 + 3 + # Day 11 4 + 5 + ```elixir 6 + Mix.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 + 27 + stones = 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 41 + defmodule 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)) 67 + end 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 79 + 1..25 80 + |> Enum.reduce(stones, fn _, acc -> 81 + Stones.blink(acc) 82 + end) 83 + |> Map.values() 84 + |> Enum.sum() 85 + ``` 86 + 87 + <!-- livebook:{"output":true} --> 88 + 89 + ``` 90 + 209412 91 + ``` 92 + 93 + ## Part 2 94 + 95 + ```elixir 96 + 1..75 97 + |> Enum.reduce(stones, fn _, acc -> 98 + Stones.blink(acc) 99 + end) 100 + |> Map.values() 101 + |> Enum.sum() 102 + ``` 103 + 104 + <!-- livebook:{"output":true} --> 105 + 106 + ``` 107 + 248967696501656 108 + ``` 109 + 110 + <!-- livebook:{"offset":1963,"stamp":{"token":"XCP.YCGtDQl3XNWJm5oY1OPI2QDRB7EIjZxBmwK3eswS1ryD28kg8fS_fKGIFJGFbtL1NL7wYrv2ADW60yeAZnCv5KbDelUm_bxkPN4_K56iTJ1toOGfIRYlo2lj5beAjrmbhRw","version":2}} -->