microsoft/qdk

Public

mirrored fromhttps://github.com/microsoft/qdkAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
alex/pythontelem

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

katas/content/key_distribution/shared_key/Verification.qs

37lines · modecode

1namespace Kata.Verification {
2 open Microsoft.Quantum.Convert;
3
4 function GenerateSharedKey_Reference(basesAlice : Bool[], basesBob : Bool[], bits : Bool[]) : Bool[] {
5 mutable key = [];
6 for i in 0 .. Length(bits) - 1 {
7 if basesAlice[i] == basesBob[i] {
8 set key += [bits[i]];
9 }
10 }
11
12 return key;
13 }
14
15 @EntryPoint()
16 operation CheckSolution() : Bool {
17
18 for N in 8 .. 20 {
19 let basesAlice = RandomArray(N);
20 let basesBob = RandomArray(N);
21 let bits = RandomArray(N);
22 let expected = GenerateSharedKey_Reference(basesAlice, basesBob, bits);
23 let result = Kata.GenerateSharedKey(basesAlice, basesBob, bits);
24
25 if Length(result) != Length(expected) or BoolArrayAsInt(result) != BoolArrayAsInt(expected) {
26 Message($"Unexpected key value");
27 Message($"Alice's bases: {basesAlice}");
28 Message($"Bob's bases: {basesBob}");
29 Message($"Got key {result}, expected {expected}");
30 return false;
31 }
32 }
33
34 Message("Correct!");
35 true
36 }
37}
38