Powered by AppSignal & Oban Pro

Day 01

2019day01.livemd

Day 01

Mix.install([
  {:kino, "~> 0.7.0"}
])

IEx.Helpers.c("/Users/johnb/dev/2022adventOfCode/advent_of_code.ex")
alias AdventOfCode, as: AOC
alias Kino.Input

Installation and Data

input_day = Kino.Input.number("Day")
input_p1example = Kino.Input.textarea("Example Data")
input_p1puzzleInput = Kino.Input.textarea("Puzzle Input")
input_source_select =
  Kino.Input.select("Source", [{:example, "example"}, {:puzzle_input, "puzzle input"}])
p1data = fn ->
  (Kino.Input.read(input_source_select) == :example &&
     Kino.Input.read(input_p1example)) ||
    Kino.Input.read(input_p1puzzleInput)
end

Part 1

part 1 title here

  • Add part 1 puzzle instructions here
defmodule Day01 do
  def calc_fuel(x) do
    Integer.floor_div(x, 3) - 2
  end

  def solve(text) do
    text
    |> AOC.as_single_lines()
    |> Enum.map(&String.to_integer/1)
    |> Enum.map(fn x -> calc_fuel(x) end)
    |> Enum.filter(fn x -> x >= 0 end)
    |> Enum.sum()
  end

  def solve2(fuel, sum \\ 0) do
    if fuel > 0 do
      # |> IO.inspect()
      next_fuel = calc_fuel(fuel)
      solve2(next_fuel, sum + ((next_fuel > 0 && next_fuel) || 0))
    else
      sum
    end
  end

  def solve2_for_real(text) do
    text
    |> AOC.as_single_lines()
    |> Enum.map(&String.to_integer/1)
    |> Enum.map(fn x -> calc_fuel(x) end)
    |> Enum.map(fn x -> solve2(x, x) end)
    |> Enum.filter(fn x -> x >= 0 end)
    |> Enum.sum()
  end
end

# fuel1 =
#   p1data.()
#   |> Day01.solve()

p1data.()
|> Day01.solve2_for_real()

# "Done?"

Part 2 (maybe solved above)

1969