The projects are assigned in your groups of 1-3 group members (except for cases justified in writing and approved by the instructor).

- (25 points) Select a project topic from the
choices indicated by Dr. Mueller
and Dr. Zhou.
Coordinate with the TA to get the project assigned to you
(FCFS, one group per project unless indicated otherwise). Projects
may be assigned to individuals as well as groups, depending on your
interests and the scope of the problem (see project description).
Write a two page problem description and an outline with a timeline for approaching a solution (to be turned in), collect references (papers, web pointers) and create a web page to present this information. These are the deliverables for this homework due date. You should then tackle the technical part of your problem, which is due as part of the next homework assigned.

Turn in the file project.pdf. Make sure to include the URL to your project page in it.

- Peer evaluation: Each group members has to submit a peer evaluation form.
- (30 points) Deutsch-Jozsa Algorithm
The Deutsch-Jozsa Algorithm is used to determine whether a given function is balanced (it returns 0 for half of all inputs and 1 for the other half) or constant (it returns 0 for all inputs or 1 for all inputs). Create two different oracle functions, one which is balanced and one which is constant. These functions should be such that they have three inputs and one output. The constant function always either flips or doesn't flip the output qubit. The balanced function will need to take the input qubits into account and flip the output qubit for half of all possible inputs. Then follow these steps to test them out

- Prepare 4 qubits, with 3 in the |+> state and one in the |-> state.
- Subject your 4 qubits to your oracle function.
- Place a hadamard gate on your input qubits and measure them.
- Display the output states for both oracles.
- If you've created your oracle correctly, you should see 000 for the constant oracle and 111 for the balanced oracle input qubits.

Turn in

**DJ.py**or**DJ.ipynb** - (40 points) Simon's Algorithm
Simon's algorithm is used to find the hidden bitstring of a two-to-one mapping blackbox function, and inspired the famous Shor's Algorithm.

This algorithm involves using the entangled properties of qubits. Using simon.py as a base, you are going to write a generalized function to take a bitstring and turn it into the oracle, to better understand how Simon's algorithm actually works.

- The base file has a specific oracle function for the bitstring
*b = '110'*hardcoded in as an example. You'll need to change it to correctly accept any string. - If your oracle is correct, your dot products should all be 0 no matter what string you use.
- Run the code '1010' through your oracle as a proof of concept.

Turn in your code as

**simon.py**or**simon.ipynb** - The base file has a specific oracle function for the bitstring

------------------------------------------------------------------

Project ID |
Students |
URL |

B1 | Kelvin Dsouza and Billy McCray | link |

B2 | Carl Klier and Nachiket Patel | link |

B2 | Anshul Jethvani and Mostafa Eghbali Zarch | link |

B3 | Stanton Parham and Peiyi Li | link |

B3 | Spencer Yoder | link |

B4 | Yunsoo Ha | link |

B4 | Alec Landow and Liam Adams | link |

B4 | Nick Albergo and Benjamin Ryle | link |

M1 | Alexander Allen and Keith Mellendorf | link |

M3 | Johnathan Wilder, Ayush Khot, Ruiwen Wu | link |