Day 6: Trash Compactor
Mix.install([:kino])
Section
input = Kino.Input.textarea("input", monospace: true)
input
|> Kino.Input.read()
|> String.split("\n")
|> Enum.split(-1)
|> then(fn {numbers, [ops]} ->
numbers
|> Enum.map(fn row ->
row
|> String.split(" ", trim: true)
|> Enum.map(&String.to_integer/1)
end)
|> Enum.zip()
|> Enum.map(&Tuple.to_list/1)
|> then(fn numbers ->
ops
|> String.split(" ", trim: true)
|> Enum.map(fn
"*" -> &Enum.product/1
"+" -> &Enum.sum/1
end)
|> Enum.zip(numbers)
end)
end)
|> Enum.sum_by(fn {op, numbers} -> op.(numbers) end)
input
|> Kino.Input.read()
|> String.split("\n")
|> Enum.split(-1)
|> then(fn {numbers, [ops]} ->
numbers
|> Enum.map(&String.graphemes/1)
|> Enum.zip()
|> Enum.map(&Tuple.to_list/1)
|> Enum.map(&Enum.join/1)
|> Enum.map(&String.trim/1)
|> Enum.chunk_by(& &1 == "")
|> Enum.take_every(2)
|> then(fn numbers ->
ops
|> String.split(" ", trim: true)
|> Enum.map(fn
"*" -> &Enum.product/1
"+" -> &Enum.sum/1
end)
|> Enum.zip(numbers)
end)
end)
|> Enum.sum_by(fn {op, numbers} ->
op.(Enum.map(numbers, &String.to_integer/1))
end)