diff --git a/logic_gates.py b/logic_gates.py new file mode 100644 index 0000000000000000000000000000000000000000..740c5327a4b3822798f82bb19a85a9de2fdb715a --- /dev/null +++ b/logic_gates.py @@ -0,0 +1,49 @@ +# Ryan McShane +# Logic Gates Modules + + # AND, OR, XOR, NAND, NOR, XNOR +def and(circuit, A, B, result): + circuit.ccx(q[A], q[B], q[result]) + +def or(circuit, A, B, result): + circuit.x(q[A]) + circuit.x(q[B]) + circuit.ccx(q[result]) + circuit.x(q[result]) + + circuit.x(q[B]) + circuit.x(q[A]) + +def nand(circuit, A, B, result): + circuit.ccx(q[A], q[B], q[result]) + circuit.x(q[result]) + +def nor(circuit, A, B, result): + circuit.x(q[A]) + circuit.x(q[B]) + circuit.ccx(q[result]) + + circuit.x(q[B]) + circuit.x(q[A]) + +def xor(circuit, A, B, result, t1, t2, t3): + nand(circuit, q[A], q[B], q[t1]) + circuit.x(q[t1]) + nand(circuit, q[A], q[t1], q[t2]) + circuit.x(q[t2]) + nand(circuit, q[B], q[t1], q[t3]) + circuit.x(q[t3]) + nand(circuit, q[t2], q[t3], q[result]) + circuit.x(q[result]) + + circuit.x(q[t3]) + nand(circuit, q[B], q[t1], q[t3]) + circuit.x(q[t2]) + nand(circuit, q[A], q[t1], q[t2]) + circuit.x(q[t1]) + nand(circuit, q[A], q[B], q[t1]) + +def xnor(circuit, a, b, result, R, At, Bt): + xor(circuit, a, b, result, R, At, Bt) + circuit.x(q[result]) +