Part 1
transpose = fn list -> Enum.zip_with(list, &Function.identity/1) end
values =
File.read!("ids.txt")
|> String.split("\n")
|> Enum.map(&(Regex.split(~r{\s+}, &1, trim: true)))
transpose.(values)
|> Enum.map(&Enum.reverse/1)
|> Enum.map(fn [head | tail] ->
case head do
"*" -> tail |> Enum.map(&String.to_integer/1) |> Enum.product
"+" -> tail |> Enum.map(&String.to_integer/1) |> Enum.sum
end
end)
|> Enum.sum
|> IO.inspect
Part 2
transpose = fn list -> Enum.zip_with(list, &Function.identity/1) end
items =
File.read!("ids.txt")
|> String.split("\n")
|> Enum.map(&(String.split(&1, "", trim: true)))
transpose.(items)
|> Enum.map(&Enum.reverse/1)
|> Enum.map(fn [head | tail] -> {head, tail |> Enum.reverse |> Enum.join("") |> String.trim} end)
|> Enum.chunk_by(fn {_, value} -> value == "" end)
|> Enum.reject(&(&1 == [{" ", ""}]))
|> Enum.map(fn [{operand, value} | tail] ->
Enum.reduce(tail, String.to_integer(value), fn {_, x}, acc ->
case operand do
"*" -> acc * String.to_integer(x)
"+" -> acc + String.to_integer(x)
end
end)
end)
|> Enum.sum
|> IO.inspect






















