— Day 7: The Treachery of Whales —
Part1
Mix.install([{:nx, github: "elixir-nx/nx", sparse: "nx"}])
defmodule Setup do
def get_input(prompt) do
case IO.gets(prompt) do
:eof -> ""
line -> line <> get_input(prompt)
end
end
end
Part1
input =
Setup.get_input("input")
|> String.split(["\n", ","], trim: true)
|> Enum.map(&String.to_integer/1)
min = Enum.min(input)
max = Enum.max(input)
tensor = Nx.tensor(input)
result =
for x <- min..max do
tensor
|> Nx.subtract(x)
|> Nx.abs()
|> Nx.sum()
|> Nx.to_number()
end
Enum.min(result)
Part2
input =
Setup.get_input("input")
|> String.split(["\n", ","], trim: true)
|> Enum.map(&String.to_integer/1)
defmodule Part2 do
def go(input) do
min = Enum.min(input)
max = Enum.max(input)
min..max
|> Enum.map(fn x ->
input
|> Enum.map(&Enum.sum(0..abs(&1 - x)))
|> Enum.sum()
end)
|> Enum.min()
end
end
Part2.go(input)