예제 #1
0
        static void Main(string[] args)
        {
            using (var qsim = new QuantumSimulator())
            {
                var rand = new System.Random();
                System.Console.WriteLine($"For our first trick, we'll use quantum teleportation to send classical bits.");
                System.Console.WriteLine($"That is, we'll send and receive qubits in states |0> and |1> only.\n\n");
                foreach (var i in Enumerable.Range(0, 10))
                {
                    var sent     = rand.Next(2) == 0; // rand.Next(2) returns a nonnegative random integer less than 2
                    var received = TeleportClassicalMessage.Run(qsim, sent).Result;
                    System.Console.WriteLine($"Round {i}:\t Sent {sent}, \t Received {received}.");
                    System.Console.WriteLine(sent == received ? "Teleportation Successful!" : "\n");
                }

                System.Console.WriteLine($"\n\nFor our second trick, we'll quantum teleport states " +
                                         $"1/sqrt(2) * (|0> +/- |1>) .");
                System.Console.WriteLine($"We'll use H+ and H- as names for these two states.\n\n");
                foreach (var i in Enumerable.Range(0, 10))
                {
                    var sent     = rand.Next(2) == 0; // rand.Next(2) returns a nonnegative random integer less than 2
                    var received = TeleportNonclassicalQubit.Run(qsim, sent).Result;
                    System.Console.WriteLine($"Round {i}:\t Sent " + (sent? "H+" : "H-") + ", \t Received " +
                                             (received? "H+" : "H-") + ".");
                    System.Console.WriteLine(sent == received ? "Teleportation Successful!" : "\n");
                }
            }
        }
예제 #2
0
        static void Main(string[] args)
        {
            using (var sim = new QuantumSimulator())
            {
                var rand = new System.Random();

                foreach (var idxRun in Enumerable.Range(0, 8))
                {
                    var sent     = rand.Next(2) == 0;
                    var received = TeleportClassicalMessage.Run(sim, sent).Result;
                    System.Console.WriteLine($"Round {idxRun}:\tSent {sent},\tgot {received}.");
                    System.Console.WriteLine(sent == received ? "Teleportation successful!!\n" : "\n");
                }
            }
        }
예제 #3
0
        static void Main(string[] args)
        {
            using (var sim = new QuantumSimulator())
            {
                var rand = new System.Random();

                foreach (var i in Enumerable.Range(0, 8))
                {
                    var sent     = rand.Next(2) == 0;
                    var received = TeleportClassicalMessage.Run(sim, sent).GetAwaiter().GetResult();
                    Console.WriteLine($"{i}回目: Sent {sent}, got {received}.");
                    Console.WriteLine(sent == received ? "Teleportation 成功!!\n" : "\n");
                }
            }

            Console.WriteLine("キーを押したら終了します...");
            Console.ReadLine();
        }
예제 #4
0
        static void Main(string[] args)
        {
            // using (var qsim = new QuantumSimulator())
            // {
            //     //HelloQ.Run(qsim, int.MaxValue, int.MaxValue).Wait();
            //     TooManyQubits.Run(qsim).Wait();
            // }

            var tsim = new ToffoliSimulator(qubitCount: 500000);

            TooManyQubits.Run(tsim).Wait();

            var estimator = new ResourcesEstimator();

            TeleportClassicalMessage.Run(estimator, false).Wait();

            var data = estimator.Data;

            Console.WriteLine(estimator.ToTSV());
        }
예제 #5
0
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.Run(async(context) =>
            {
                if (context.Request.Path != Teleportation)
                {
                    return;
                }

                var text = context.Request.Query.FirstOrDefault(x => x.Key == Text).Value;
                using (var sim = new QuantumSimulator())
                {
                    var b      = System.Text.Encoding.UTF8.GetBytes(text);
                    var inputs = b.SelectMany(x => ConvertByteToBoolArray(x));
                    var output = new List <bool>();
                    foreach (var input in inputs)
                    {
                        var received = TeleportClassicalMessage.Run(sim, input).Result;
                        output.Add(received);
                    }

                    var outputBytes = new List <byte>();
                    for (int i = 0; i < b.Length; i++)
                    {
                        var r = ConvertBoolArrayToByte(output.Skip(8 * i).Take(8).ToArray());
                        outputBytes.Add(r);
                    }

                    var outputText = System.Text.Encoding.UTF8.GetString(outputBytes.ToArray());
                    var response   = JsonConvert.SerializeObject(new { TeleportedText = outputText, QubitsCount = inputs.Count() });
                    context.Response.ContentType = "application/json";
                    await context.Response.WriteAsync(response);
                }
            });
        }
예제 #6
0
        static void Main(string[] args)
        {
            var sim  = new QuantumSimulator();
            var rand = new System.Random();

            #region Teleport Classical Message
            foreach (var idxRun in Enumerable.Range(0, 8))
            {
                var sent     = rand.Next(2) == 0;
                var received = TeleportClassicalMessage.Run(sim, sent).Result;
                System.Console.WriteLine($"Round {idxRun}:\tSent {sent},\tgot {received}.");
                System.Console.WriteLine(sent == received ? "Teleportation successful!!\n" : "\n");
            }
            #endregion

            #region Teleport Quantum Message
            // In this region, we call the TeleportQuantumMessage operation
            // from Operation.qs, which prepares a qubit in the |+〉 ≔ H|0〉
            // state and asserts that the probability of observing a Zero
            // result is 50%.

            // Thus, we will run the operation several times and report
            // the mean.

            System.Console.WriteLine("\n\nPress Enter to continue...\n\n");
            System.Console.ReadLine();

            var averageResult = Enumerable.Range(0, 1000).Select((idx) =>
                                                                 TeleportQuantumMessage.Run(sim).Result == Simulation.Core.Result.One ? 1 : 0
                                                                 ).Average();
            System.Console.WriteLine($"Frequency of '0' in teleported message: {averageResult}");
            #endregion

            System.Console.WriteLine("\n\nPress Enter to exit...\n\n");
            System.Console.ReadLine();
        }