this repo has no description

Day 07 of 2025

hauleth.dev 8003c417 64ac2206

verified
+71
+71
2025/day07.livemd
··· 1 + # Day 07 2 + 3 + ```elixir 4 + Mix.install([:kino_aoc, :image]) 5 + ``` 6 + 7 + ## Parse 8 + 9 + <!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiI3Iiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjUifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 10 + 11 + ```elixir 12 + {:ok, puzzle_input} = 13 + KinoAOC.download_puzzle("2025", "7", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 14 + ``` 15 + 16 + ```elixir 17 + [start | rest] = String.split(puzzle_input) 18 + 19 + start_col = byte_size(start) - byte_size(String.trim_leading(start, ".")) 20 + ``` 21 + 22 + ```elixir 23 + splitters = 24 + Enum.map(rest, fn row -> 25 + row 26 + |> String.to_charlist() 27 + |> Enum.with_index() 28 + |> Enum.filter(&(elem(&1, 0) == ?^)) 29 + |> MapSet.new(&elem(&1, 1)) 30 + end) 31 + ``` 32 + 33 + ## Part 1 34 + 35 + ```elixir 36 + Enum.reduce(splitters, {MapSet.new([start_col]), 0}, fn splits, {beams, count} -> 37 + import MapSet, only: [intersection: 2, difference: 2, union: 2] 38 + 39 + hits = intersection(beams, splits) 40 + new_beams = for hit <- hits, dx <- [-1, 1], into: MapSet.new(), do: hit + dx 41 + beams = beams |> difference(hits) |> union(new_beams) 42 + 43 + {beams, MapSet.size(hits) + count} 44 + end) 45 + ``` 46 + 47 + ## Part 2 48 + 49 + ```elixir 50 + Enum.reduce(splitters, %{start_col => 1}, fn splits, beams -> 51 + Enum.reduce(splits, beams, fn s, acc -> 52 + case Map.pop(acc, s) do 53 + {nil, map} -> 54 + map 55 + 56 + {count, map} -> 57 + Map.merge( 58 + map, 59 + %{ 60 + (s + 1) => count, 61 + (s - 1) => count 62 + }, 63 + fn _k, a, b -> a + b end 64 + ) 65 + end 66 + end) 67 + end) 68 + |> Enum.sum_by(&elem(&1, 1)) 69 + ``` 70 + 71 + <!-- livebook:{"offset":1576,"stamp":{"token":"XCP.4O_0Nj7V9wS7w6P8UvTBgpp4vhW57_8fy1nGUUO-kK-Q74Dt1KmWL8qx_FolCKDbpEooq8lZ8yn9tXw9AlKXzLPCKp2hEtIvQvKWtBiSmje0vN9ms0Uqud5m2GxlgCHmtg","version":2}} -->