Elixir Nesting
defmodule Nesting do
def nesting(""), do: 1
def nesting(s) do
result =
s
|> String.graphemes()
|> Enum.reduce_while([], fn ch, stack ->
case ch do
")" ->
case stack do
["(" | rest] -> {:cont, rest}
_ -> {:halt, :fail}
end
other ->
{:cont, [other | stack]}
end
end)
if result == [], do: 1, else: 0
end
end
This treats the string like a balance counter: open parentheses add one, closing ones remove one.