/// <summary> /// Main entry point to the program. /// </summary> /// <param name="args">Command-line parameters.</param> static void Main(string[] args) { const int trialCount = 10000; var generator = new Random(); using (QuantumSimulator sim = new QuantumSimulator()) { var classicalWinCount = 0; var quantumWinCount = 0; for (int i = 0; i < trialCount; i++) { bool aliceBit = GetRandomBit(generator); bool bobBit = GetRandomBit(generator); bool aliceMeasuresFirst = GetRandomBit(generator); bool classicalXor = !PlayClassicalStrategy(aliceBit, bobBit); bool quantumXor = !PlayQuantumStrategy.Run( sim, aliceBit, bobBit, aliceMeasuresFirst).Result; if ((aliceBit && bobBit) == classicalXor) { classicalWinCount++; } if ((aliceBit && bobBit) == quantumXor) { quantumWinCount++; } } Console.WriteLine( "Classical success rate: " + classicalWinCount / (float)trialCount); Console.WriteLine( "Quantum success rate: " + quantumWinCount / (float)trialCount); if (quantumWinCount > classicalWinCount) { Console.WriteLine("The quantum success rate exceeded the classical success rate!"); } } }
static void Main(string[] args) { int j = 0; do { j++; const int trialCount = 20000; Random generator = new Random(); using (QuantumSimulator sim = new QuantumSimulator()) { int classicalWinCount = 0; int quantumWinCount = 0; int classicalAliceBobWinCount = 0; int classicalJohnMikeWinCount = 0; int quantumAliceBobWinCount = 0; int quantumJohnMikeWinCount = 0; int classicalnowincount = 0; int quantumnowincount = 0; for (int i = 0; i < trialCount; i++) { bool aliceBit = GetRandomBit(generator); bool bobBit = GetRandomBit(generator); bool johnBit = GetRandomBit(generator); bool mikeBit = GetRandomBit(generator); bool aliceMeasuresFirst = GetRandomBit(generator); bool[] classicalXor = PlayClassicalStrategy(aliceBit, bobBit, johnBit, mikeBit); bool[] quantumXor = PlayQuantumStrategy.Run( sim, aliceBit, bobBit, johnBit, mikeBit, aliceMeasuresFirst).Result.ToArray(); if ((aliceBit && bobBit) == !classicalXor[0]) { classicalWinCount++; classicalAliceBobWinCount++; } else if ((johnBit && mikeBit) == !classicalXor[1]) { classicalWinCount++; classicalJohnMikeWinCount++; } else { classicalnowincount++; } if ((aliceBit && bobBit) == !quantumXor[0]) { quantumWinCount++; quantumAliceBobWinCount++; } else if ((johnBit && mikeBit) == !quantumXor[1]) { quantumWinCount++; quantumJohnMikeWinCount++; } else { quantumnowincount++; } } Console.WriteLine( "Classical success rate: " + classicalWinCount / (float)trialCount); Console.WriteLine("Classical Alice and Bob won {0} times ", classicalAliceBobWinCount); Console.WriteLine("Classical John and Mike won {0} times ", classicalJohnMikeWinCount); Console.WriteLine("Classical did not win {0} times ", classicalnowincount); Console.WriteLine(); Console.WriteLine( "Quantum success rate: " + quantumWinCount / (float)trialCount); Console.WriteLine("Quantum Alice and Bob won {0} times ", quantumAliceBobWinCount); Console.WriteLine("Quantum John and Mike won {0} times ", quantumJohnMikeWinCount); Console.WriteLine("Quantum did not win {0} times ", quantumnowincount); Console.WriteLine(); if (quantumWinCount > classicalWinCount) { Console.WriteLine("Round {0} Quantum Win ", j); } else { Console.WriteLine("Round {0} Classical Win ", j); } } Console.WriteLine(); } while (j < 10); Console.WriteLine(); Console.WriteLine("All rounds completed"); Console.ReadLine(); }