import AOC

aoc 2015, 1 do
  def input_chars(), do: input_string() |> String.split("", trim: true)

  def p1 do
    input_chars()
    |> Enum.reduce(0, fn
      "(", floor -> floor + 1
      ")", floor -> floor - 1
    end)
  end

  def p2 do
    input_string()
    |> find_step_entering_basement(0, 0)
  end

  defp find_step_entering_basement(")" <> _, 0, step), do: step + 1

  defp find_step_entering_basement("(" <> rest, floor, step),
    do: find_step_entering_basement(rest, floor + 1, step + 1)

  defp find_step_entering_basement(")" <> rest, floor, step),
    do: find_step_entering_basement(rest, floor - 1, step + 1)
end