this repo has no description
1<!-- livebook:{"persist_outputs":true} --> 2 3# Day 24 4 5## Section 6 7```elixir 8defmodule Day24 do 9 def parse("inp " <> reg), do: {:inp, String.to_atom(reg)} 10 11 def parse(<<op::binary-size(3)>> <> " " <> <<reg>> <> " " <> arg) do 12 {String.to_atom(op), String.to_atom(<<reg>>), parse_arg(arg)} 13 end 14 15 defp parse_arg(arg) do 16 case Integer.parse(arg) do 17 {num, ""} -> num 18 :error -> String.to_atom(arg) 19 end 20 end 21 22 def evaluate(ops, input), do: evaluate(ops, Integer.digits(input), %{w: 0, x: 0, y: 0, z: 0}) 23 24 defp evaluate([], _, regs), do: regs 25 26 defp evaluate([:nop | rest], input, regs), do: evaluate(rest, input, regs) 27 28 defp evaluate([{:inp, reg} | rest], [v | input], regs), 29 do: evaluate(rest, input, %{regs | reg => v}) 30 31 defp evaluate([{:eql, reg, v} | rest], input, regs) do 32 val = if get(reg, regs) == get(v, regs), do: 1, else: 0 33 34 evaluate(rest, input, %{regs | reg => val}) 35 end 36 37 defp evaluate([{:add, reg, v} | rest], input, regs), 38 do: evaluate(rest, input, %{regs | reg => get(reg, regs) + get(v, regs)}) 39 40 defp evaluate([{:mul, reg, v} | rest], input, regs), 41 do: evaluate(rest, input, %{regs | reg => get(reg, regs) * get(v, regs)}) 42 43 defp evaluate([{:div, reg, v} | rest], input, regs), 44 do: evaluate(rest, input, %{regs | reg => div(get(reg, regs), get(v, regs))}) 45 46 defp evaluate([{:mod, reg, v} | rest], input, regs), 47 do: evaluate(rest, input, %{regs | reg => rem(get(reg, regs), get(v, regs))}) 48 49 defp get(imm, _regs) when is_integer(imm), do: imm 50 defp get(reg, regs) when is_atom(reg), do: Map.get(regs, reg, 0) 51end 52 53input = 54 File.stream!("day24.txt") 55 |> Stream.map(&String.trim/1) 56 |> Enum.map(&Day24.parse/1) 57 |> IO.inspect(limit: :infinity) 58 59length(input) 60``` 61 62<!-- livebook:{"output":true} --> 63 64``` 65[ 66 {:inp, :w}, 67 {:mul, :x, 0}, 68 {:add, :x, :z}, 69 {:mod, :x, 26}, 70 {:div, :z, 1}, 71 {:add, :x, 11}, 72 {:eql, :x, :w}, 73 {:eql, :x, 0}, 74 {:mul, :y, 0}, 75 {:add, :y, 25}, 76 {:mul, :y, :x}, 77 {:add, :y, 1}, 78 {:mul, :z, :y}, 79 {:mul, :y, 0}, 80 {:add, :y, :w}, 81 {:add, :y, 16}, 82 {:mul, :y, :x}, 83 {:add, :z, :y}, 84 {:inp, :w}, 85 {:mul, :x, 0}, 86 {:add, :x, :z}, 87 {:mod, :x, 26}, 88 {:div, :z, 1}, 89 {:add, :x, 12}, 90 {:eql, :x, :w}, 91 {:eql, :x, 0}, 92 {:mul, :y, 0}, 93 {:add, :y, 25}, 94 {:mul, :y, :x}, 95 {:add, :y, 1}, 96 {:mul, :z, :y}, 97 {:mul, :y, 0}, 98 {:add, :y, :w}, 99 {:add, :y, 11}, 100 {:mul, :y, :x}, 101 {:add, :z, :y}, 102 {:inp, :w}, 103 {:mul, :x, 0}, 104 {:add, :x, :z}, 105 {:mod, :x, 26}, 106 {:div, :z, 1}, 107 {:add, :x, 13}, 108 {:eql, :x, :w}, 109 {:eql, :x, 0}, 110 {:mul, :y, 0}, 111 {:add, :y, 25}, 112 {:mul, :y, :x}, 113 {:add, :y, 1}, 114 {:mul, :z, :y}, 115 {:mul, :y, 0}, 116 {:add, :y, :w}, 117 {:add, :y, 12}, 118 {:mul, :y, :x}, 119 {:add, :z, :y}, 120 {:inp, :w}, 121 {:mul, :x, 0}, 122 {:add, :x, :z}, 123 {:mod, :x, 26}, 124 {:div, :z, 26}, 125 {:add, :x, -5}, 126 {:eql, :x, :w}, 127 {:eql, :x, 0}, 128 {:mul, :y, 0}, 129 {:add, :y, 25}, 130 {:mul, :y, :x}, 131 {:add, :y, 1}, 132 {:mul, :z, :y}, 133 {:mul, :y, 0}, 134 {:add, :y, :w}, 135 {:add, :y, 12}, 136 {:mul, :y, :x}, 137 {:add, :z, :y}, 138 {:inp, :w}, 139 {:mul, :x, 0}, 140 {:add, :x, :z}, 141 {:mod, :x, 26}, 142 {:div, :z, 26}, 143 {:add, :x, -3}, 144 {:eql, :x, :w}, 145 {:eql, :x, 0}, 146 {:mul, :y, 0}, 147 {:add, :y, 25}, 148 {:mul, :y, :x}, 149 {:add, :y, 1}, 150 {:mul, :z, :y}, 151 {:mul, :y, 0}, 152 {:add, :y, :w}, 153 {:add, :y, 12}, 154 {:mul, :y, :x}, 155 {:add, :z, :y}, 156 {:inp, :w}, 157 {:mul, :x, 0}, 158 {:add, :x, :z}, 159 {:mod, :x, 26}, 160 {:div, :z, 1}, 161 {:add, :x, 14}, 162 {:eql, :x, :w}, 163 {:eql, :x, 0}, 164 {:mul, :y, 0}, 165 {:add, :y, 25}, 166 {:mul, :y, :x}, 167 {:add, :y, 1}, 168 {:mul, :z, :y}, 169 {:mul, :y, 0}, 170 {:add, :y, :w}, 171 {:add, :y, 2}, 172 {:mul, :y, :x}, 173 {:add, :z, :y}, 174 {:inp, :w}, 175 {:mul, :x, 0}, 176 {:add, :x, :z}, 177 {:mod, :x, 26}, 178 {:div, :z, 1}, 179 {:add, :x, 15}, 180 {:eql, :x, :w}, 181 {:eql, :x, 0}, 182 {:mul, :y, 0}, 183 {:add, :y, 25}, 184 {:mul, :y, :x}, 185 {:add, :y, 1}, 186 {:mul, :z, :y}, 187 {:mul, :y, 0}, 188 {:add, :y, :w}, 189 {:add, :y, 11}, 190 {:mul, :y, :x}, 191 {:add, :z, :y}, 192 {:inp, :w}, 193 {:mul, :x, 0}, 194 {:add, :x, :z}, 195 {:mod, :x, 26}, 196 {:div, :z, 26}, 197 {:add, :x, -16}, 198 {:eql, :x, :w}, 199 {:eql, :x, 0}, 200 {:mul, :y, 0}, 201 {:add, :y, 25}, 202 {:mul, :y, :x}, 203 {:add, :y, 1}, 204 {:mul, :z, :y}, 205 {:mul, :y, 0}, 206 {:add, :y, :w}, 207 {:add, :y, 4}, 208 {:mul, :y, :x}, 209 {:add, :z, :y}, 210 {:inp, :w}, 211 {:mul, :x, 0}, 212 {:add, :x, :z}, 213 {:mod, :x, 26}, 214 {:div, :z, 1}, 215 {:add, :x, 14}, 216 {:eql, :x, :w}, 217 {:eql, :x, 0}, 218 {:mul, :y, 0}, 219 {:add, :y, 25}, 220 {:mul, :y, :x}, 221 {:add, :y, 1}, 222 {:mul, :z, :y}, 223 {:mul, :y, 0}, 224 {:add, :y, :w}, 225 {:add, :y, 12}, 226 {:mul, :y, :x}, 227 {:add, :z, :y}, 228 {:inp, :w}, 229 {:mul, :x, 0}, 230 {:add, :x, :z}, 231 {:mod, :x, 26}, 232 {:div, :z, 1}, 233 {:add, :x, 15}, 234 {:eql, :x, :w}, 235 {:eql, :x, 0}, 236 {:mul, :y, 0}, 237 {:add, :y, 25}, 238 {:mul, :y, :x}, 239 {:add, :y, 1}, 240 {:mul, :z, :y}, 241 {:mul, :y, 0}, 242 {:add, :y, :w}, 243 {:add, :y, 9}, 244 {:mul, :y, :x}, 245 {:add, :z, :y}, 246 {:inp, :w}, 247 {:mul, :x, 0}, 248 {:add, :x, :z}, 249 {:mod, :x, 26}, 250 {:div, :z, 26}, 251 {:add, :x, -7}, 252 {:eql, :x, :w}, 253 {:eql, :x, 0}, 254 {:mul, :y, 0}, 255 {:add, :y, 25}, 256 {:mul, :y, :x}, 257 {:add, :y, 1}, 258 {:mul, :z, :y}, 259 {:mul, :y, 0}, 260 {:add, :y, :w}, 261 {:add, :y, 10}, 262 {:mul, :y, :x}, 263 {:add, :z, :y}, 264 {:inp, :w}, 265 {:mul, :x, 0}, 266 {:add, :x, :z}, 267 {:mod, :x, 26}, 268 {:div, :z, 26}, 269 {:add, :x, -11}, 270 {:eql, :x, :w}, 271 {:eql, :x, 0}, 272 {:mul, :y, 0}, 273 {:add, :y, 25}, 274 {:mul, :y, :x}, 275 {:add, :y, 1}, 276 {:mul, :z, :y}, 277 {:mul, :y, 0}, 278 {:add, :y, :w}, 279 {:add, :y, 11}, 280 {:mul, :y, :x}, 281 {:add, :z, :y}, 282 {:inp, :w}, 283 {:mul, :x, 0}, 284 {:add, :x, :z}, 285 {:mod, :x, 26}, 286 {:div, :z, 26}, 287 {:add, :x, -6}, 288 {:eql, :x, :w}, 289 {:eql, :x, 0}, 290 {:mul, :y, 0}, 291 {:add, :y, 25}, 292 {:mul, :y, :x}, 293 {:add, :y, 1}, 294 {:mul, :z, :y}, 295 {:mul, :y, 0}, 296 {:add, :y, :w}, 297 {:add, :y, 6}, 298 {:mul, :y, :x}, 299 {:add, :z, :y}, 300 {:inp, :w}, 301 {:mul, :x, 0}, 302 {:add, :x, :z}, 303 {:mod, :x, 26}, 304 {:div, :z, 26}, 305 {:add, :x, -11}, 306 {:eql, :x, :w}, 307 {:eql, :x, 0}, 308 {:mul, :y, 0}, 309 {:add, :y, 25}, 310 {:mul, :y, :x}, 311 {:add, :y, 1}, 312 {:mul, :z, :y}, 313 {:mul, :y, 0}, 314 {:add, :y, :w}, 315 {:add, :y, 15}, 316 {:mul, :y, :x}, 317 {:add, :z, :y} 318] 319``` 320 321<!-- livebook:{"output":true} --> 322 323``` 324252 325``` 326 327```elixir 32844..52 |> Enum.map(&rem(&1, 26)) 329``` 330 331<!-- livebook:{"output":true} --> 332 333``` 334[18, 19, 20, 21, 22, 23, 24, 25, 0] 335``` 336 337```elixir 338IO.inspect(Day24.evaluate(input, 11_111_111_111_161)) 339``` 340 341<!-- livebook:{"output":true} --> 342 343``` 344%{w: 1, x: 1, y: 16, z: 207697766} 345``` 346 347<!-- livebook:{"output":true} --> 348 349``` 350%{w: 1, x: 1, y: 16, z: 207697766} 351```