from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
secret = '1011'
qc = QuantumCircuit(len(secret))
qc.h(range(len(secret)))  # uniform superposition
for q, bit in enumerate(reversed(secret)):
    if bit == '1':
        qc.z(q)            # phase oracle for parity with secret
qc.h(range(len(secret)))  # recover secret by interference
print(qc.draw())
print(Statevector.from_instruction(qc).probabilities_dict())
# Expected: {'1011': 1.0}
