Powered by AppSignal & Oban Pro

Day 7: The Treachery of Whales

day_07_the_treachery_of_whales.livemd

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()