Powered by AppSignal & Oban Pro

Day 7: The Treachery of Whales

backup_2021_original/07.livemd

Day 7: The Treachery of Whales

Intro

https://adventofcode.com/2021/day/7

Input

input_test =
  """
  16,1,2,0,4,2,7,1,2,14
  """
  |> String.split(["\n", ","], trim: true)
  |> Enum.map(&String.to_integer/1)
[16, 1, 2, 0, 4, 2, 7, 1, 2, 14]
input =
  File.read!("input07.txt")
  |> String.split(["\n", ","], trim: true)
  |> Enum.map(&String.to_integer/1)
[1101, 1, 29, 67, 1102, 0, 1, 65, 1008, 65, 35, 66, 1005, 66, 28, 1, 67, 65, 20, 4, 0, 1001, 65, 1,
 65, 1106, 0, 8, 99, 35, 67, 101, 99, 105, 32, 110, 39, 101, 115, 116, 32, 112, 97, 115, 32, 117,
 110, 101, 32, 105, ...]

Part 1

mmin = Enum.min(input_test)
mmax = Enum.max(input_test)

v = for i <- mmin..mmax, do: i

v
|> Enum.map(fn p -> Enum.reduce(input_test, 0, fn i, acc -> abs(i - p) + acc end) end)
|> Enum.min()
37
mmin = Enum.min(input)
mmax = Enum.max(input)

v = for i <- mmin..mmax, do: i

v
|> Enum.map(fn p -> Enum.reduce(input, 0, fn i, acc -> abs(i - p) + acc end) end)
|> Enum.min()
343468

Correct: 343468

Part 2

defmodule Sum do
  def f(steps), do: f(steps, 1, 0)

  defp f(0, _price, sum) do
    sum
  end

  defp f(steps_left, price, sum) do
    f(steps_left - 1, price + 1, sum + price)
  end
end
{:module, Sum, <<70, 79, 82, 49, 0, 0, 5, ...>>, {:f, 3}}
Sum.f(11)
66
mmin = Enum.min(input_test)
mmax = Enum.max(input_test)

v = for i <- mmin..mmax, do: i

v
|> Enum.map(fn p -> Enum.reduce(input_test, 0, fn i, acc -> Sum.f(abs(i - p)) + acc end) end)
|> Enum.min()
168
mmin = Enum.min(input)
mmax = Enum.max(input)

v = for i <- mmin..mmax, do: i

v
|> Enum.map(fn p -> Enum.reduce(input, 0, fn i, acc -> Sum.f(abs(i - p)) + acc end) end)
|> Enum.min()
96086265

Correct: 96086265