# Deutsch-Jozsa algorithm: an oracle implementation

I would like to implement the Deutsch-Jozsa algorithm myself using cirq. However, I faced the problem of the implementation of the oracle.

I endeavored to apply the Deutsch-Jozsa algorithm for $$n+1$$-qubits circuit, but I got the wrong answer. I found the analytical implementation of oracle here Implementing an oracle, so I try to program it. You can see below my implementation:

def qunatum_oracle (input_qubits, output_qubit, secret_string, quibit_number):
for qubit, bit in zip(input_qubits, secret_string):
if bit and qubit != input_qubits[quibit_number - 1]:
yield [CNOT(qubit, output_qubit), X(output_qubit)]

if bit and qubit == input_qubits[quibit_number - 1]:
yield CNOT(qubit, output_qubit)


where input_qubits are the circuit of input qubits, out output_qubit is the output qubit, secret_string is an input x of the oracle, and qubit_number is the number of qubits.

My oracle is acting on the $$n + 1$$ qubit and implements a CNOT gate. My oracle returns 1 instead of 0 for a constant string. I have no idea what was wrong. I was inspired by the realization of the Deutsch algorithm by cirq team https://github.com/quantumlib/Cirq/blob/master/examples/deutsch.py but still didn't get my mistake. Unfortunately, I haven't found the solution to my problem on the forum.

Could you provide me any clue or what I did wrong or could you share the link where I can find the solution?

My idea is I would like to implement a general oracle that finds whether a function is balanced or constant for $$n+1$$ circuit without dividing for balanced and constant cases.

Best regards,

Elijah