aoc 2019 day 1
Setup
Mix.install([{:kino, "~> 0.5.1"}])
input = Kino.Input.textarea("input")
Part 1
input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Enum.map(&String.to_integer/1)
|> Enum.map(&(div(&1, 3) - 2))
|> Enum.sum()
Part 2
input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Enum.map(&String.to_integer/1)
|> Enum.map(fn mass ->
Stream.iterate(1, & &1)
|> Enum.reduce_while({mass, 0}, fn
_, {remain, fuel} when remain <= 6 ->
{:halt, fuel}
_, {remain, fuel} ->
remain = div(remain, 3) - 2
{:cont, {remain, fuel + remain}}
end)
end)
|> Enum.sum()