-
Notifications
You must be signed in to change notification settings - Fork 54
/
Copy pathadder.js
65 lines (48 loc) · 1.59 KB
/
adder.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//
// Adder: sums two 4-bit numbers
// Input: first number in qubits 1, 2, 3, 4. Second number in qubits 5, 6, 7, 8
// Output: qubits 5, 6, 7, 8, 9
//
var QuantumCircuit = require("../../lib/quantum-circuit.js");
var majority = new QuantumCircuit();
majority.addGate("cx", 0, [2, 1]);
majority.addGate("cx", 1, [2, 0]);
majority.addGate("ccx", 2, [0, 1, 2]);
var unmaj = new QuantumCircuit();
unmaj.addGate("ccx", 0, [0, 1, 2]);
unmaj.addGate("cx", 1, [2, 0]);
unmaj.addGate("cx", 2, [0, 1]);
var adder = new QuantumCircuit();
adder.registerGate("majority", majority.save());
adder.registerGate("unmaj", unmaj.save());
adder.addGate("majority", 0, [0, 5, 1]);
adder.addGate("majority", 1, [1, 6, 2]);
adder.addGate("majority", 2, [2, 7, 3]);
adder.addGate("majority", 3, [3, 8, 4]);
adder.addGate("cx", 4, [4, 9]);
adder.addGate("unmaj", 5, [3, 8, 4]);
adder.addGate("unmaj", 6, [2, 7, 3]);
adder.addGate("unmaj", 7, [1, 6, 2]);
adder.addGate("unmaj", 8, [0, 5, 1]);
adder.addMeasure(5, "ans", 0);
adder.addMeasure(6, "ans", 1);
adder.addMeasure(7, "ans", 2);
adder.addMeasure(8, "ans", 3);
adder.addMeasure(9, "ans", 4);
console.log("");
console.log("Calculating...");
adder.run([0, 1, 0, 0, 0, 1, 1, 1, 1, 0]);
console.log("");
console.log("Answer:", adder.getCregValue("ans"));
console.log("");
console.log("Final amplitudes:");
adder.print(true);
console.log("");
console.log("Angles:");
console.log(adder.angles());
console.log("");
console.log("Probabilities:");
console.log(adder.probabilities());
console.log("");
console.log("Measured:");
console.log(adder.measureAll());