Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Day 07

day-07.livemd

Day 07

Setup

Mix.install([
  {:kino, "~> 0.4.1"}
])
input = Kino.Input.text("Please enter your Input")
line =
  input
  |> Kino.Input.read()
  |> String.split(",", trim: true)
  |> Enum.map(&String.to_integer/1)

Part 1

{min, max} = Enum.min_max(line)

min..max
|> Enum.map(fn i ->
  Enum.map(line, fn j -> abs(j - i) end) |> Enum.sum()
end)
|> Enum.min()

Part 2

n = Enum.sum(line) / length(line)

floor(n)..ceil(n)
|> Enum.map(fn i ->
  line
  |> Enum.map(fn j ->
    n = abs(j - i)
    n * (n + 1) / 2
  end)
  |> Enum.sum()
end)
|> Enum.min()
|> Kernel.trunc()

Fun

Kino.animate(300, true, fn
  true ->
    {:cont,
     Kino.Markdown.new(~S"""
     ```
     (\/) (°,,,,°) (||)
     ```
     """), false}

  false ->
    {:cont,
     Kino.Markdown.new(~S"""
     ```
     (||) (°,,,,°) (\/)
     ```
     """), true}
end)