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
··· 44 44 end) 45 45 ``` 46 46 47 + <!-- livebook:{"branch_parent_index":0} --> 48 + 47 49 ## Part 2 48 50 49 51 ```elixir ··· 68 70 |> Enum.sum_by(&elem(&1, 1)) 69 71 ``` 70 72 71 - <!-- livebook:{"offset":1576,"stamp":{"token":"XCP.4O_0Nj7V9wS7w6P8UvTBgpp4vhW57_8fy1nGUUO-kK-Q74Dt1KmWL8qx_FolCKDbpEooq8lZ8yn9tXw9AlKXzLPCKp2hEtIvQvKWtBiSmje0vN9ms0Uqud5m2GxlgCHmtg","version":2}} --> 73 + <!-- livebook:{"branch_parent_index":0} --> 74 + 75 + ## Image 76 + 77 + ```elixir 78 + height = length([start | rest]) 79 + width = byte_size(start) 80 + 81 + {height, width} 82 + ``` 83 + 84 + ```elixir 85 + Image.new!(width, height) 86 + |> Image.mutate(fn img -> 87 + Image.Draw.point!(img, start_col, 0, color: :yellow) 88 + 89 + splitters 90 + |> Enum.with_index(1) 91 + |> Enum.reduce(MapSet.new([start_col]), fn {splits, y}, beams -> 92 + import MapSet, only: [intersection: 2, difference: 2, union: 2] 93 + 94 + for x <- beams do 95 + Image.Draw.point!(img, x, y, color: :green) 96 + end 97 + 98 + for x <- splits do 99 + Image.Draw.point!(img, x, y, color: :red) 100 + end 101 + 102 + hits = intersection(beams, splits) 103 + new_beams = for hit <- hits, dx <- [-1, 1], into: MapSet.new(), do: hit + dx 104 + beams = beams |> difference(hits) |> union(new_beams) 105 + 106 + beams 107 + end) 108 + 109 + #for {row, y} <- Enum.with_index(splitters, 1), 110 + # x <- row, 111 + # do: Image.Draw.point!(img, x, y, color: :red) 112 + 113 + img 114 + end) 115 + |> then(fn {:ok, img} -> img end) 116 + |> Image.resize!(5, interpolate: :nearest) 117 + ``` 118 + 119 + <!-- livebook:{"offset":2629,"stamp":{"token":"XCP.lHomXHh84XridtwMBP5AP7BXVVCvUC-jx1w-h7SzIFygBNyHhdS1qTLyp97LGQ3Rf1f4to4IjQtJmlsi-0PrxC2vUjGg97fvP9zvt5n0IxMkwLnFfvafaIDjJSsZLX1Bcg","version":2}} -->