code: def find_bitstring(self, qc: QuantumComputer, bitstring_map: Dict[str, int]) -> str:
          
  
          self._init_attr(bitstring_map)
  
          ro = self.grover_circuit.declare('ro', 'BIT', len(self.qubits))
          self.grover_circuit += [MEASURE(qubit, ro[idx]) for idx, qubit in enumerate(self.qubits)]
          executable = qc.compile(self.grover_circuit)
          sampled_bitstring = qc.run(executable)
  
          return "".join([str(bit) for bit in sampled_bitstring[0]])
docs: Runs Grover's Algorithm to find the bitstring that is designated by ``bistring_map``.
  
          In particular, this will prepare an initial state in the uniform superposition over all bit-
          strings, an then use Grover's Algorithm to pick out the desired bitstring.
  
          :param qc: the connection to the Rigetti cloud to run pyQuil programs.
          :param bitstring_map: a mapping from bitstrings to the phases that the oracle should impart
              on them. If the oracle should "look" for a bitstring, it should have a ``-1``, otherwise
              it should have a ``1``.
          :return: Returns the bitstring resulting from measurement after Grover's Algorithm.