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

    end
  end

  def get_initial_state do
    # hardcoded the initial state since parsing the input is not the challanging
    # part of this puzzle..
    %State{

    search([state])
  end

  # Breadth First Search
  def search([], _visited \\ MapSet.new()), do: :end_not_found

  def search([current | rest] = _open, discovered) do
    cond do
      State.is_end?(current) ->
        # NOTE: For part A it should find it 31 hops in.
