this repo has no description
1defmodule GravAssist do 2 def calc([op, _, _ | rest], a \\ 12, b \\ 2) do 3 hd(execute([op, a, b | rest])) 4 end 5 6 def execute(bytecode) when is_list(bytecode), do: execute(:array.from_list(bytecode)) 7 def execute(bytecode), do: eval(bytecode, 0) 8 9 defp eval(bytecode, ic) do 10 case :array.get(ic, bytecode) do 11 99 -> :array.to_list(bytecode) 12 op when op in 1..2 -> 13 pos_a = :array.get(ic + 1, bytecode) 14 pos_b = :array.get(ic + 2, bytecode) 15 pos_r = :array.get(ic + 3, bytecode) 16 17 result = compute(op, :array.get(pos_a, bytecode), :array.get(pos_b, bytecode)) 18 19 new_bc = :array.set(pos_r, result, bytecode) 20 21 eval(new_bc, ic + 4) 22 _ -> :error 23 end 24 end 25 26 defp compute(1, a, b), do: a + b 27 defp compute(2, a, b), do: a * b 28end 29 30data = 31 IO.read(:line) 32 |> String.split(",") 33 |> Enum.map(&String.to_integer(String.trim(&1))) 34 35IO.inspect(GravAssist.calc(data), label: :sol1) 36 37for(a <- 0..99, 38 b <- 0..99, 39 19690720 == GravAssist.calc(data, a, b), 40 do: {a, b}) 41|> IO.inspect(label: :sol2)