{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Quantum Katas and Tutorials as Jupyter Notebooks\n", "\n", "\n", "## List of Notebook Tutorials\n", "\n", "* **[Deutsch–Jozsa algorithm](./tutorials/DeutschJozsaAlgorithm/DeutschJozsaAlgorithmTutorial.ipynb)**.\n", " This tutorial teaches you to implement classical functions and equivalent quantum oracles, \n", " discusses the classical solution to the Deutsch–Jozsa problem and introduces Deutsch and Deutsch–Jozsa algorithms.\n", "\n", "\n", "## List of Katas\n", "\n", "#### Quantum computing concepts\n", "\n", "* **[Basic quantum computing gates](./BasicGates/BasicGates.ipynb)**.\n", " This kata focuses on main single-qubit and multi-qubit gates used in quantum computing.\n", "* **[Superposition](./Superposition/Superposition.ipynb)**.\n", " The tasks focus on preparing a certain superposition state on one or multiple qubits.\n", "* **[Measurements](./Measurements/Measurements.ipynb)**.\n", " The tasks focus on distinguishing quantum states using measurements.\n", "* **[JointMeasurements](./JointMeasurements/JointMeasurements.ipynb)**.\n", " The tasks focus on using joint (parity) measurements for distinguishing quantum states and performing unitary transformations.\n", " \n", "#### Simple algorithms\n", "\n", "* **[Teleportation](./Teleportation/Teleportation.ipynb)**. This kata walks you through the standard teleportation protocol and several variations.\n", "* **[Superdense coding](./SuperdenseCoding/SuperdenseCoding.ipynb)**. This kata walks you through the superdense coding protocol.\n", "* **[Deutsch–Jozsa algorithm](./DeutschJozsaAlgorithm/DeutschJozsaAlgorithm.ipynb)**.\n", " This kata starts with writing quantum oracles which implement classical functions, and continues to introduce the Bernstein–Vazirani and Deutsch–Jozsa algorithms.\n", "\n", "#### Grover's algorithm\n", "\n", "* **[Grover's algorithm](./GroversAlgorithm/GroversAlgorithm.ipynb)**. This kata introduces Grover's search algorithm and writing quantum oracles to be used with it.\n", "* **[Solving SAT problems using Grover's algorithm](./SolveSATWithGrover/SolveSATWithGrover.ipynb)**. This kata continues the exploration of Grover's search algorithm, using \n", "SAT problems as an example. It covers implementing quantum oracles based on the problem description instead of a \n", "hard-coded answer and using Grover's algorithm to solve problems with unknown number of solutions.\n", "* **[Solving graph coloring problems using Grover's algorithm](./GraphColoring/GraphColoring.ipynb)**.\n", "This kata continues the exploration of Grover's search algorithm, using graph coloring problems as an example.\n", "\n", "#### Entanglement games\n", "\n", "* **[CHSH game](./CHSHGame/CHSHGame.ipynb)**.\n", "* **[GHZ Game](./GHZGame/GHZGame.ipynb)**.\n", "* **[Magic Square Game](./MagicSquareGame/MagicSquareGame.ipynb)**.\n", "\n", "#### Miscellaneous\n", "\n", "* **[Phase estimation](./PhaseEstimation/PhaseEstimation.ipynb)**.\n", "This kata covers phase estimation algorithms.\n", "* **[Bit-flip error correcting code](./QEC_BitFlipCode/QEC_BitFlipCode.ipynb)**.\n", " This kata introduces a 3-qubit error correcting code for protecting against bit-flip errors.\n", "* **[Ripple-carry adder](./RippleCarryAdder/RippleCarryAdder.ipynb)**.\n", " This kata walks you through building a ripple-carry adder on a quantum computer.\n", "* **[Unitary Patterns](./UnitaryPatterns/UnitaryPatterns.ipynb)**.\n", "This unusual kata offers tasks on implementing unitaries with matrices that follow certain patterns of \n", "zero and non-zero elements.\n", "\n", "\n", "For a full list of Quantum Katas available as Q# projects instead of Jupyter Notebooks, see the [QuantumKatas repository](https://github.com/Microsoft/QuantumKatas#list-of-katas-).\n", "\n", "\n", "## Getting Started with Kata Notebooks and Tutorials\n", "\n", "Each kata notebook presents the tasks of the respective kata (Q# project) in Jupyter Notebook format. This makes getting started with the katas a lot easier - you don't need to install anything locally to try them out!\n", "\n", "Notebook tutorials are designed with Notebook format in mind - in addition to programming exercises they include a lot of theoretical explanations and code samples for you to learn from.\n", "\n", "Make sure you're viewing this file on Binder (if not, use [this link](https://mybinder.org/v2/gh/Microsoft/QuantumKatas/master?filepath=index.ipynb)). From here you can navigate to the individual kata or tutorial notebooks using the links above.\n", "\n", "* Each tutorial or kata notebook contains a sequence of tasks on the topic, progressing from trivial to challenging.\n", "* Each task is defined in a separate code cell, preceded by the description of the task in a Markdown cell.\n", " Your goal is to fill in the blanks in the code (marked with `// ...` comments) with some Q# code that solves the task. \n", "* To verify your solution, run the code cell using Ctrl + Enter (or ⌘ + Enter on macOS). This will invoke the test covering the task and let you know whether it passes or fails, and if it fails, what the error is.\n", "* You can find pointers to reference materials you might need to solve the tasks, both on quantum computing and on Q#, either in the beginning of the tutorial or the kata or next to the task to which they are relevant.\n", "* You can find reference solutions in `ReferenceImplementation.qs` files of the corresponding katas or tutorials." ] } ], "metadata": { "kernelspec": { "display_name": "Q#", "language": "qsharp", "name": "iqsharp" }, "language_info": { "file_extension": ".qs", "mimetype": "text/x-qsharp", "name": "qsharp", "version": "0.4" } }, "nbformat": 4, "nbformat_minor": 2 }