this repo has no description

Add drawing of the board for day 07 of 2025

hauleth.dev 8ceaee32 8003c417

verified
Changed files
+49 -1
2025
+49 -1
2025/day07.livemd
···
end)
```
## Part 2
```elixir
···
|> Enum.sum_by(&elem(&1, 1))
```
-
<!-- livebook:{"offset":1576,"stamp":{"token":"XCP.4O_0Nj7V9wS7w6P8UvTBgpp4vhW57_8fy1nGUUO-kK-Q74Dt1KmWL8qx_FolCKDbpEooq8lZ8yn9tXw9AlKXzLPCKp2hEtIvQvKWtBiSmje0vN9ms0Uqud5m2GxlgCHmtg","version":2}} -->
···
end)
```
+
<!-- livebook:{"branch_parent_index":0} -->
+
## Part 2
```elixir
···
|> Enum.sum_by(&elem(&1, 1))
```
+
<!-- livebook:{"branch_parent_index":0} -->
+
+
## Image
+
+
```elixir
+
height = length([start | rest])
+
width = byte_size(start)
+
+
{height, width}
+
```
+
+
```elixir
+
Image.new!(width, height)
+
|> Image.mutate(fn img ->
+
Image.Draw.point!(img, start_col, 0, color: :yellow)
+
+
splitters
+
|> Enum.with_index(1)
+
|> Enum.reduce(MapSet.new([start_col]), fn {splits, y}, beams ->
+
import MapSet, only: [intersection: 2, difference: 2, union: 2]
+
+
for x <- beams do
+
Image.Draw.point!(img, x, y, color: :green)
+
end
+
+
for x <- splits do
+
Image.Draw.point!(img, x, y, color: :red)
+
end
+
+
hits = intersection(beams, splits)
+
new_beams = for hit <- hits, dx <- [-1, 1], into: MapSet.new(), do: hit + dx
+
beams = beams |> difference(hits) |> union(new_beams)
+
+
beams
+
end)
+
+
#for {row, y} <- Enum.with_index(splitters, 1),
+
# x <- row,
+
# do: Image.Draw.point!(img, x, y, color: :red)
+
+
img
+
end)
+
|> then(fn {:ok, img} -> img end)
+
|> Image.resize!(5, interpolate: :nearest)
+
```
+
+
<!-- livebook:{"offset":2629,"stamp":{"token":"XCP.lHomXHh84XridtwMBP5AP7BXVVCvUC-jx1w-h7SzIFygBNyHhdS1qTLyp97LGQ3Rf1f4to4IjQtJmlsi-0PrxC2vUjGg97fvP9zvt5n0IxMkwLnFfvafaIDjJSsZLX1Bcg","version":2}} -->