> For the complete documentation index, see [llms.txt](https://elixir.petrolidas.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elixir.petrolidas.com/exhort/day-22.md).

# Day 22

## Exercises

* [ ] [Stack Underflow](#stack-underflow)

### Stack Underflow

[Exercise on Exercism](https://exercism.org/tracks/elixir/exercises/stack-underflow) **|** [View my solution](https://exercism.org/tracks/elixir/exercises/stack-underflow/solutions/petros)

#### Solution

<details>

<summary>Expand to see code (spoiler alert)</summary>

{% code lineNumbers="true" %}

```elixir
defmodule RPNCalculator.Exception do
  defmodule DivisionByZeroError do
    defexception message: "division by zero occurred"
  end

  defmodule StackUnderflowError do
    defexception message: "stack underflow occurred"

    @impl true
    def exception(value) do
      case value do
        [] ->
          %StackUnderflowError{}

        _ ->
          %StackUnderflowError{message: "stack underflow occurred, context: " <> value}
      end
    end
  end

  def divide(stack) when length(stack) < 2, do: raise(StackUnderflowError, "when dividing")
  def divide([0, _nominator] = _stack), do: raise(DivisionByZeroError)
  def divide([divisor, nominator]) when divisor != 0, do: nominator / divisor
end

```

{% endcode %}

[View gist on GitHub](https://gist.github.com/petros/0154390a5bd57a27c963371a36cbc02b)

</details>

#### Notes

## Overall progress

<figure><img src="/files/QElOV9qYBLPREk4Uq88m" alt="An image showing my progress on Exercism. It&#x27;s 23.1% as of Monday, 29 August 2022."><figcaption><p>Progress</p></figcaption></figure>
