From 2243cc33473b5c5b691a8aadd799529848dc7757 Mon Sep 17 00:00:00 2001 From: Sarah Kaiser Date: Wed, 17 Mar 2021 16:51:01 -0700 Subject: [PATCH 1/4] =?UTF-8?q?Start=20of=20our=20implementation=20?= =?UTF-8?q?=F0=9F=92=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- .../counterfeit-coins/CounterfeitCoins.csproj | 8 ++++ src/qsharp/counterfeit-coins/Program.qs | 47 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/qsharp/counterfeit-coins/CounterfeitCoins.csproj create mode 100644 src/qsharp/counterfeit-coins/Program.qs diff --git a/Dockerfile b/Dockerfile index 2b02dc9..125cf15 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/quantum/iqsharp-base:0.12.20092803 +FROM mcr.microsoft.com/quantum/iqsharp-base:0.15.2102.129448 ENV IQSHARP_HOSTING_ENV=QAZOO_DOCKER USER root diff --git a/src/qsharp/counterfeit-coins/CounterfeitCoins.csproj b/src/qsharp/counterfeit-coins/CounterfeitCoins.csproj new file mode 100644 index 0000000..f9a6634 --- /dev/null +++ b/src/qsharp/counterfeit-coins/CounterfeitCoins.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp3.1 + + + diff --git a/src/qsharp/counterfeit-coins/Program.qs b/src/qsharp/counterfeit-coins/Program.qs new file mode 100644 index 0000000..12504d6 --- /dev/null +++ b/src/qsharp/counterfeit-coins/Program.qs @@ -0,0 +1,47 @@ +namespace CounterfeitCoins { + + open Microsoft.Quantum.Arithmetic; + open Microsoft.Quantum.Logical; + open Microsoft.Quantum.Convert; + open Microsoft.Quantum.Arrays; + open Microsoft.Quantum.Canon; + open Microsoft.Quantum.Intrinsic; + open Microsoft.Quantum.Bitwise; + +/// N coin total in the bag, k coins are counterfeit. +/// https://arxiv.org/pdf/1009.0416.pdf +/// + + @EntryPoint() + operation HelloQ() : Unit { + Message("Hello quantum world!"); + } + + operation FindCounterfeits(numCoins : Int) : Int { + //1. Setup register + use register1 = Qubit[numCoins]; + // Apply W + within { + ApplyW(register1, numCoins); + } + apply { + //2. + use register2 = Qubit[numCoins]; + //ApplyA(register2); + //ControlledOnBitString(TBD, register2); + + } + //3. + return MeasureInteger(LittleEndian(register1)); + + } + + operation ApplyW(target : Qubit[], numCoins : Int) : Unit + is Adj + Ctl { + //Generate list of all integers up to N + let QEven = Filtered(Compose(EqualI(0, _), Parity), + RangeAsIntArray(0..numCoins)); + + } +} + From fcc356cbc7909778cbe9f29da256877b2a54dd7f Mon Sep 17 00:00:00 2001 From: Sarah Kaiser Date: Wed, 31 Mar 2021 12:22:57 -0700 Subject: [PATCH 2/4] new approach for state prep --- src/qsharp/counterfeit-coins/Program.qs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/qsharp/counterfeit-coins/Program.qs b/src/qsharp/counterfeit-coins/Program.qs index 12504d6..d989d21 100644 --- a/src/qsharp/counterfeit-coins/Program.qs +++ b/src/qsharp/counterfeit-coins/Program.qs @@ -39,8 +39,11 @@ operation ApplyW(target : Qubit[], numCoins : Int) : Unit is Adj + Ctl { //Generate list of all integers up to N - let QEven = Filtered(Compose(EqualI(0, _), Parity), - RangeAsIntArray(0..numCoins)); + //let QEven = Filtered(Compose(EqualI(0, _), Parity), + // RangeAsIntArray(0..numCoins)); + + ApplyToEachCA(H, Most(target)); + ApplyToEachCA(CNOT(Tail(target), _), Most(target)); } } From 7f1cd089ad4eb4ed10a6d0e74fd14d9db3911c5f Mon Sep 17 00:00:00 2001 From: Sarah Kaiser Date: Wed, 7 Apr 2021 16:46:57 -0700 Subject: [PATCH 3/4] Stream progress, adding weight register operation --- src/qsharp/counterfeit-coins/Program.qs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/qsharp/counterfeit-coins/Program.qs b/src/qsharp/counterfeit-coins/Program.qs index d989d21..25921d9 100644 --- a/src/qsharp/counterfeit-coins/Program.qs +++ b/src/qsharp/counterfeit-coins/Program.qs @@ -11,13 +11,8 @@ /// N coin total in the bag, k coins are counterfeit. /// https://arxiv.org/pdf/1009.0416.pdf /// - @EntryPoint() - operation HelloQ() : Unit { - Message("Hello quantum world!"); - } - - operation FindCounterfeits(numCoins : Int) : Int { + operation FindCounterfeits(numCoins : Int, numCounterfeit : Int) : Int { //1. Setup register use register1 = Qubit[numCoins]; // Apply W @@ -41,10 +36,20 @@ //Generate list of all integers up to N //let QEven = Filtered(Compose(EqualI(0, _), Parity), // RangeAsIntArray(0..numCoins)); + let most = Most(target); + ApplyToEachCA(H, most); + // |uniform⟩|0⟩ + ApplyToEachCA(CNOT(Tail(target), _), most); + // + } - ApplyToEachCA(H, Most(target)); - ApplyToEachCA(CNOT(Tail(target), _), Most(target)); - + operation ApplyR( + control : Qubit[], + target : LittleEndian) + : Unit is Adj + Ctl { + // R |i_0, i_1, i_2,..i_N⟩|0⟩ - > |i⟩|wt(i)⟩ + // wt() = the number of 1's in your bitstring + let arrayControl = Mapped(ConstantArray(1, _), control); + ApplyToEachCA((Controlled IncrementByInteger)(_ ,(1, target)) , arrayControl); } } - From bc172f3975523a8cb1f543502bfae0338cf201d2 Mon Sep 17 00:00:00 2001 From: Sarah Kaiser Date: Tue, 11 May 2021 13:37:42 -0700 Subject: [PATCH 4/4] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index faab1f8..302c58f 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,13 @@ Implementations of algorithms from http://quantumalgorithmzoo.org/ ## Index -| Algorithm | Speedup | Implementations | | -|--------------------|--------------------------------------------------|--------------------------------------|--| -| Factoring | Superpolynomial | [Q#](/src/qsharp/factoring) | | -| Bernstein-Vazirani | Polynomial Directly, Superpolynomial Recursively | [Q#](/src/qsharp/bernstein-vazirani) | | -| Searching | Polynomial | [Q#](/src/qsharp/searching) | | -| | | | | +| Algorithm | Speedup | Implementations | +|--------------------|--------------------------------------------------|--------------------------------------| +| Factoring | Superpolynomial | [Q#](/src/qsharp/factoring) | +| Bernstein-Vazirani | Polynomial Directly, Superpolynomial Recursively | [Q#](/src/qsharp/bernstein-vazirani) | +| Searching | Polynomial | [Q#](/src/qsharp/searching) | +| Counterfeit coins | Polynomial | [Q#](/src/qsharp/counterfeit-coins) | ## TODOs: -- [ ] Add doc strings \ No newline at end of file +- [ ] Add doc strings