package answer
type Qubit bool
func X(q Qubit) Qubit {
return !q
}
func CNOT(control Qubit, target Qubit) Qubit {
if control {
return !target
}
return target
}
func Oracle(x []Qubit, y Qubit, b []int) {
for i := 0; i < len(x) && i < len(b); i++ {
if b[i] == 0 {
x[i] = X(x[i])
}
y = CNOT(x[i], y)
if b[i] == 0 {
x[i] = X(x[i])
}
}
}