     search([state])
   end
 
-  def search([], _visited), do: :end_not_found
+  # Breadth First Search
+  def search([], _visited \\ MapSet.new()), do: :end_not_found
 
-  # Let's begin with a reasonable breadth first search to see how far that takes us.
-  def search([current | rest] = _open, discovered \\ MapSet.new()) do
+  def search([current | rest] = _open, discovered) do
     cond do
       State.is_end?(current) ->
         # NOTE: For part A it should find it 31 hops in.

          %Generator{identifier: :thulium},
          %Microchip{identifier: :thulium},
          %Generator{identifier: :plutonium},
          %Generator{identifier: :strontium}
        ]),
        Floor.new([
          %Microchip{identifier: :plutonium},

      true ->
        # new node; grab all its successors (connected nodes) and
        # drop the ones we for sure already saw.
        new_successors =
          current
          |> State.valid_next_states()
          |> Enum.reject(&MapSet.member?(discovered, &1.hash))
