Day 7: The Treachery of Whales
Mix.install([:kino])
input = Kino.Input.textarea("Please paste your input:")
Setup
inputs =
input
|> Kino.Input.read()
|> String.split([",", "\n"], trim: true)
|> Enum.map(&String.to_integer/1)
Part 1
https://adventofcode.com/2021/day/7
Solve: Part 1
list = inputs |> Enum.sort()
count = list |> Enum.count()
cheapest_position = list |> Enum.at(round(count / 2))
_answer =
inputs
|> Enum.reduce(0, fn position, sum -> sum + abs(position - cheapest_position) end)
Part 2
https://adventofcode.com/2021/day/7#part2
Solve: Part 2
sum = inputs |> Enum.sum()
count = inputs |> Enum.count()
average = sum / count
cheapest_positions = [ceil(average), floor(average)]
_answer =
cheapest_positions
|> Enum.map(fn cheapest_position ->
inputs
|> Enum.reduce(0, fn position, sum ->
diff = abs(position - cheapest_position)
fuel = trunc(diff * (diff + 1) / 2)
sum + fuel
end)
end)
|> Enum.min()