Skip to content

Instantly share code, notes, and snippets.

@primaryobjects
Last active February 13, 2023 20:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save primaryobjects/87e0dbd4e55277349d60ae3564c06c1a to your computer and use it in GitHub Desktop.
Save primaryobjects/87e0dbd4e55277349d60ae3564c06c1a to your computer and use it in GitHub Desktop.
The Enhanced Deutsch Jozsa Quantum Algorithm
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"The Enhanced Deutsch-Jozsa Algorithm\n",
"====================================\n",
"\n",
"- Automatically detects an input array as constant (1) or balanced (0)\n",
"- Responds dynamically to the input array of qubits\n",
"- Single auxillary output qubit"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<qiskit.circuit.instructionset.InstructionSet at 0x1e4ff5844f0>"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from qiskit import qiskit, QuantumRegister, ClassicalRegister, QuantumCircuit, Aer\n",
"from qiskit.visualization import plot_histogram\n",
"\n",
"qr = QuantumRegister(3, 'qr')\n",
"aux = QuantumRegister(1, 'aux')\n",
"cr = ClassicalRegister(1, 'cr')\n",
"qc = QuantumCircuit(qr, aux, cr)\n",
"\n",
"# Set the output qubit to 1 and place it in superposition.\n",
"qc.x(aux)\n",
"qc.h(aux)\n",
"\n",
"# Set each input qubit to superposition.\n",
"qc.h(qr)\n",
"\n",
"qc.barrier()\n",
"\n",
"# Apply the oracle, encoding input qubits with a value of 1 as a control and the output qubit as the target.\n",
"# Example: 101\n",
"qc.cx([0, 2], aux)\n",
"\n",
"qc.barrier()\n",
"\n",
"# Bring the qubits out of superposition\n",
"qc.h(qr)\n",
"qc.h(aux)\n",
"\n",
"qc.barrier()\n",
"\n",
"# Invert the output qubit back to 0.\n",
"qc.x(aux)\n",
"\n",
"# Invert the output to 1 if all inputs are 1.\n",
"qc.mcx(qr, aux)\n",
"qc.x(qr)\n",
"qc.mcx(qr, aux)\n",
"\n",
"qc.x(qr)\n",
"\n",
"# Measure the output qubit.\n",
"qc.measure(aux, cr)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"word-wrap: normal;white-space: pre;background: #fff0;line-height: 1.1;font-family: &quot;Courier New&quot;,Courier,monospace\"> ┌───┐ ░ ░ ┌───┐ ░ ┌───┐ ┌───┐\n",
" qr_0: ┤ H ├──────░───■────────░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤ ░ │ ░ ├───┤ ░ │ ├───┤ │ ├───┤\n",
" qr_1: ┤ H ├──────░───┼────────░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤ ░ │ ░ ├───┤ ░ │ ├───┤ │ ├───┤\n",
" qr_2: ┤ H ├──────░───┼────■───░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤┌───┐ ░ ┌─┴─┐┌─┴─┐ ░ ├───┤ ░ ┌───┐┌─┴─┐└───┘┌─┴─┐└┬─┬┘\n",
"aux_0: ┤ X ├┤ H ├─░─┤ X ├┤ X ├─░─┤ H ├─░─┤ X ├┤ X ├─────┤ X ├─┤M├─\n",
" └───┘└───┘ ░ └───┘└───┘ ░ └───┘ ░ └───┘└───┘ └───┘ └╥┘ \n",
" cr: 1/════════════════════════════════════════════════════════╩══\n",
" 0 </pre>"
],
"text/plain": [
" ┌───┐ ░ ░ ┌───┐ ░ ┌───┐ ┌───┐\n",
" qr_0: ┤ H ├──────░───■────────░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤ ░ │ ░ ├───┤ ░ │ ├───┤ │ ├───┤\n",
" qr_1: ┤ H ├──────░───┼────────░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤ ░ │ ░ ├───┤ ░ │ ├───┤ │ ├───┤\n",
" qr_2: ┤ H ├──────░───┼────■───░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤┌───┐ ░ ┌─┴─┐┌─┴─┐ ░ ├───┤ ░ ┌───┐┌─┴─┐└───┘┌─┴─┐└┬─┬┘\n",
"aux_0: ┤ X ├┤ H ├─░─┤ X ├┤ X ├─░─┤ H ├─░─┤ X ├┤ X ├─────┤ X ├─┤M├─\n",
" └───┘└───┘ ░ └───┘└───┘ ░ └───┘ ░ └───┘└───┘ └───┘ └╥┘ \n",
" cr: 1/════════════════════════════════════════════════════════╩══\n",
" 0 "
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"qc.draw()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAGwCAYAAAA5X9QTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyiUlEQVR4nO3deVhV9d7//9feGwRFQMspFSEKtWMamqI4hgOY1e2t5tQptXKo7tPJ9OouTVPrUrOjJys75VBKRy0tT6Mpkgqk4lA55XHAGW9FJROE64jA3r8//LJ+7hhkuzeycT0f18V1sd7rsz7rs7A/Xn3W+qxlcTgcDgEAAMA0rJU9AAAAANxcBEAAAACTIQACAACYDAEQAADAZAiAAAAAJkMABAAAMBkCIAAAgMn4VPYAbmV2u12nT59WYGCgLBZLZQ8HAADcwhwOhy5duqSGDRvKai17jo8AWIFOnz6tkJCQyh4GAAAwkfT0dDVu3LjMNgTAChQYGCjp6j9EUFBQJY8GAADcyrKzsxUSEmLkj7IQACtQ0W3foKAgAiAAALgpyvPYGYtAAAAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAelJKSokceeUQNGzaUxWLRV199dd1jkpKS1KZNG/n5+enuu+/WkiVLirV5//33FRYWJn9/f7Vv317bt2932n/58mX9z//8j26//XbVrFlTAwYM0NmzZz10VQBuNQRAAPCg3Nxc3XfffXr//ffL1f7YsWN66KGHFBMTo127dmns2LEaOXKkEhISjDYrVqzQuHHjNGXKFP3yyy+67777FBcXp3PnzhltXnzxRX377bf6/PPPlZycrNOnT6t///4evz4AtwaLw+FwVPYgblXZ2dkKDg5WVlaWgoKCKns4AG4yi8WiL7/8Uv/93/9dapuXX35Zq1ev1q+//mrUhgwZoosXL2rt2rWSpPbt26tdu3aaN2+eJMlutyskJETPP/+8XnnlFWVlZalu3bpavny5Hn30UUnSgQMHdM899yg1NVUdOnSouIsE4DVcyR3MAAJAJUpNTVXPnj2danFxcUpNTZUkXblyRT///LNTG6vVqp49exptfv75Z+Xn5zu1ad68uZo0aWK0AYBrEQABoBJlZGSofv36TrX69esrOztb//nPf5SZmanCwsIS22RkZBh9VKtWTbVq1Sq1DQBciwAIAABgMj6VPQAAMLMGDRoUW6179uxZBQUFqXr16rLZbLLZbCW2adCggdHHlStXdPHiRadZwGvbAMC1mAEEgEoUHR2t9evXO9USExMVHR0tSapWrZruv/9+pzZ2u13r16832tx///3y9fV1anPw4EGdPHnSaAMA12IGEAA8KCcnR4cPHza2jx07pl27dum2225TkyZNNGHCBP3f//2fPvnkE0nSM888o3nz5ul///d/9dRTT2nDhg1auXKlVq9ebfQxbtw4DR8+XG3btlVUVJTmzp2r3NxcPfnkk5Kk4OBgPf300xo3bpxuu+02BQUF6fnnn1d0dDQrgAGUiAAIAB70008/KSYmxtgeN26cJGn48OFasmSJzpw5o5MnTxr777zzTq1evVovvvii3nnnHTVu3FiLFi1SXFyc0Wbw4ME6f/68XnvtNWVkZCgyMlJr1651Whjy9ttvy2q1asCAAcrLy1NcXJz+8Y9/3IQrBlAV8R7ACsR7AAEAwM3CewABAABQKgIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDJeGQCXLl2qMWPGqG3btvLz85PFYtGSJUtc7sdut+u9995Ty5YtVb16ddWtW1dDhw7V0aNHSz0mISFB3bp1U2BgoIKCghQTE6P169e7cTUAAADexSsD4KRJk7RgwQKdOHFCd9xxxw33M2bMGP31r3+Vw+HQX//6V/Xu3Vv/+te/1K5dO6WlpRVrv3TpUvXu3Vv79+/XiBEjNHz4cO3bt0+9evXSF1984c4lAQAAeA2Lw+FwVPYg/uiHH35QRESEQkND9eabb2rChAlavHixRowYUe4+Nm7cqO7du6tr165KTExUtWrVJElr1qxRnz59FBsbq4SEBKP977//rvDwcPn4+Gjnzp1q3Lix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1bJly3T//fdX1pAB3GJYBAIAN9m+fftUs2ZNRURESLr6PGDRgpDCwkJJUsuWLRUfH68333xThw4d0rx58ypzyABuMQRAALjJWrdurWPHjiknJ0eS5ONzdT2exWKRzWaT9P+/GuaFF15Q//79tWHDBh09erRyBgzglkMABICbLCYmRpL05z//WRs2bNCVK1dKbFc0G9isWTNlZmYagREA3EUABICbrEOHDho3bpx2796tv/zlL1q4cKHOnj3r1KZoNvD333/XqVOnFBAQoFatWlXSiAHcalgEAgCVZP78+frb3/6mo0ePqmHDhurXr58efPBBhYSEyGazqVatWnrvvfc0d+5cPffcc5ozZ05lDxnALYIACACVxOFw6PDhw1q4cKE+++wznTp1SpJUr149+fr66syZM7Lb7Ro6dKhmzZqlxo0bV/KIAdwqCIAA4AVyc3O1fft2ffPNNzp9+rTOnTunoKAgDRo0SAMGDJC/v39lDxHALYQACABeJj8/X76+vpU9DAC3MAIgAACAybAKGAAAwGQIgAAAACZDAAQAADAZAiAAAIDJEAABAABMhgAIAABgMgRAAAAAkyEAAgAAmAwBEAAAwGQIgAAAACbz/wHPPvHtjqDE/wAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 700x500 with 1 Axes>"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"backend = Aer.get_backend('aer_simulator')\n",
"\n",
"job = qiskit.execute(qc, backend)\n",
"result = job.result()\n",
"counts = result.get_counts()\n",
"plot_histogram(counts)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using the State Vector Simulator to Avoid Measuring the Output"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 700x500 with 1 Axes>"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"qr = QuantumRegister(3, 'qr')\n",
"aux = QuantumRegister(1, 'aux')\n",
"qc = QuantumCircuit(qr, aux)\n",
"\n",
"# Set the output qubit to 1 and place it in superposition.\n",
"qc.x(aux)\n",
"qc.h(aux)\n",
"\n",
"# Set each input qubit to superposition.\n",
"qc.h(qr)\n",
"\n",
"qc.barrier()\n",
"\n",
"# Apply the oracle, encoding input qubits with a value of 1 as a control and the output qubit as the target.\n",
"# Example: 101\n",
"qc.cx([0, 2], aux)\n",
"\n",
"qc.barrier()\n",
"\n",
"# Bring the qubits out of superposition\n",
"qc.h(qr)\n",
"qc.h(aux)\n",
"\n",
"qc.barrier()\n",
"\n",
"# Invert the output qubit back to 0.\n",
"qc.x(aux)\n",
"\n",
"# Invert the output to 1 if all inputs are 1.\n",
"qc.mcx(qr, aux)\n",
"qc.x(qr)\n",
"qc.mcx(qr, aux)\n",
"\n",
"qc.x(qr)\n",
"\n",
"backend = Aer.get_backend('statevector_simulator')\n",
"\n",
"job = qiskit.execute(qc, backend)\n",
"result = job.result()\n",
"counts = result.get_counts()\n",
"plot_histogram(counts)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Encoding the Input Array Dynamically\n",
"\n",
"We can allow the user to specify the input array and convert each bit to a qubit."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"def oracle(qr, output, arr):\n",
" qc = QuantumCircuit(qr, aux)\n",
"\n",
" for i in range(len(arr)):\n",
" if arr[i] == '1':\n",
" qc.cx(qr[i], aux)\n",
"\n",
" result = qc.to_gate()\n",
" result.name = 'input'\n",
"\n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<qiskit.circuit.instructionset.InstructionSet at 0x1e4ffc7bd00>"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"qr = QuantumRegister(3, 'qr')\n",
"aux = QuantumRegister(1, 'aux')\n",
"cr = ClassicalRegister(1, 'cr')\n",
"qc = QuantumCircuit(qr, aux, cr)\n",
"\n",
"# Set the output qubit to 1 and place it in superposition.\n",
"qc.x(aux)\n",
"qc.h(aux)\n",
"\n",
"# Set each input qubit to superposition.\n",
"qc.h(qr)\n",
"\n",
"qc.barrier()\n",
"\n",
"# Apply the oracle, encoding input qubits with a value of 1 as a control and the output qubit as the target.\n",
"# Example: 101\n",
"qc.append(oracle(qr, aux, '111'), range(len(qr) + 1))\n",
"\n",
"qc.barrier()\n",
"\n",
"# Bring the qubits out of superposition\n",
"qc.h(qr)\n",
"qc.h(aux)\n",
"\n",
"qc.barrier()\n",
"\n",
"# Invert the output qubit back to 0.\n",
"qc.x(aux)\n",
"\n",
"# Invert the output to 1 if all inputs are 1.\n",
"qc.mcx(qr, aux)\n",
"qc.x(qr)\n",
"qc.mcx(qr, aux)\n",
"\n",
"qc.x(qr)\n",
"\n",
"# Measure the output qubit.\n",
"qc.measure(aux, cr)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"word-wrap: normal;white-space: pre;background: #fff0;line-height: 1.1;font-family: &quot;Courier New&quot;,Courier,monospace\"> ┌───┐ ░ ┌────────┐ ░ ┌───┐ ░ ┌───┐ ┌───┐\n",
" qr_0: ┤ H ├──────░─┤0 ├─░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤ ░ │ │ ░ ├───┤ ░ │ ├───┤ │ ├───┤\n",
" qr_1: ┤ H ├──────░─┤1 ├─░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤ ░ │ input │ ░ ├───┤ ░ │ ├───┤ │ ├───┤\n",
" qr_2: ┤ H ├──────░─┤2 ├─░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤┌───┐ ░ │ │ ░ ├───┤ ░ ┌───┐┌─┴─┐└───┘┌─┴─┐└┬─┬┘\n",
"aux_0: ┤ X ├┤ H ├─░─┤3 ├─░─┤ H ├─░─┤ X ├┤ X ├─────┤ X ├─┤M├─\n",
" └───┘└───┘ ░ └────────┘ ░ └───┘ ░ └───┘└───┘ └───┘ └╥┘ \n",
" cr: 1/════════════════════════════════════════════════════════╩══\n",
" 0 </pre>"
],
"text/plain": [
" ┌───┐ ░ ┌────────┐ ░ ┌───┐ ░ ┌───┐ ┌───┐\n",
" qr_0: ┤ H ├──────░─┤0 ├─░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤ ░ │ │ ░ ├───┤ ░ │ ├───┤ │ ├───┤\n",
" qr_1: ┤ H ├──────░─┤1 ├─░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤ ░ │ input │ ░ ├───┤ ░ │ ├───┤ │ ├───┤\n",
" qr_2: ┤ H ├──────░─┤2 ├─░─┤ H ├─░────────■──┤ X ├──■──┤ X ├\n",
" ├───┤┌───┐ ░ │ │ ░ ├───┤ ░ ┌───┐┌─┴─┐└───┘┌─┴─┐└┬─┬┘\n",
"aux_0: ┤ X ├┤ H ├─░─┤3 ├─░─┤ H ├─░─┤ X ├┤ X ├─────┤ X ├─┤M├─\n",
" └───┘└───┘ ░ └────────┘ ░ └───┘ ░ └───┘└───┘ └───┘ └╥┘ \n",
" cr: 1/════════════════════════════════════════════════════════╩══\n",
" 0 "
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"qc.draw()"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAGwCAYAAAA5X9QTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyJElEQVR4nO3deXQUZb7/8U93JyQQkgCyyZYQZVEEA0Ig7GFJGMTLRWTRq4DKos6oCMfrgCigB9C5OILiqICGOICCMq4IIQaSsIRFJCAMS0CWMCwSkG6SIyFJ9+8PfulDm4U03SEd6v06h3NS33rqqacCf3x4qp4qk8PhcAgAAACGYa7sAQAAAODmIgACAAAYDAEQAADAYAiAAAAABkMABAAAMBgCIAAAgMEQAAEAAAzGr7IHcCuz2+06deqUgoODZTKZKns4AADgFuZwOHTp0iU1atRIZnPZc3wEwAp06tQpNW3atLKHAQAADCQrK0tNmjQpsw0BsAIFBwdLuvoXERISUsmjAQAAtzKbzaamTZs680dZCIAVqOi2b0hICAEQAADcFOV57IxFIAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAL0pLS9MDDzygRo0ayWQy6auvvrruMSkpKerQoYMCAgJ05513asmSJcXavPfeewoPD1dgYKA6d+6s7du3u+y/fPmy/vznP+u2225TzZo1NXToUJ09e9ZLVwXgVkMABAAvys3N1b333qv33nuvXO2PHj2q+++/XzExMcrIyNDEiRM1duxYJSYmOtusWLFCkyZN0vTp0/XTTz/p3nvvVVxcnH799VdnmxdeeEHffvutPv/8c6WmpurUqVN68MEHvX59AG4NJofD4ajsQdyqbDabQkNDZbVaFRISUtnDAXCTmUwmffnll/rv//7vUtu89NJLWr16tfbu3eusjRw5UhcvXtTatWslSZ07d1anTp20YMECSZLdblfTpk317LPP6q9//ausVqvq1aun5cuX66GHHpIkHThwQHfddZfS09PVpUuXirtIAD7DndzBDCAAVKL09HT169fPpRYXF6f09HRJ0pUrV7Rz506XNmazWf369XO22blzp/Lz813atG7dWs2aNXO2AYBrEQABoBKdOXNGDRo0cKk1aNBANptNv//+u7Kzs1VYWFhimzNnzjj7qFatmmrVqlVqGwC4FgEQAADAYPwqewAAYGQNGzYstlr37NmzCgkJUfXq1WWxWGSxWEps07BhQ2cfV65c0cWLF11mAa9tAwDXYgYQACpRdHS0kpOTXWpJSUmKjo6WJFWrVk333XefSxu73a7k5GRnm/vuu0/+/v4ubQ4ePKgTJ0442wDAtZgBBAAvysnJ0eHDh53bR48eVUZGhurUqaNmzZppypQp+s9//qNPPvlEkvTUU09pwYIF+t///V898cQTWr9+vVauXKnVq1c7+5g0aZJGjx6tjh07KioqSvPmzVNubq4ef/xxSVJoaKiefPJJTZo0SXXq1FFISIieffZZRUdHswIYQIkIgADgRT/++KNiYmKc25MmTZIkjR49WkuWLNHp06d14sQJ5/7mzZtr9erVeuGFFzR//nw1adJEixcvVlxcnLPNiBEjdO7cOb366qs6c+aMIiMjtXbtWpeFIW+//bbMZrOGDh2qvLw8xcXF6R//+MdNuGIAVRHvAaxAvAcQAADcLLwHEAAAAKUiAAIAABgMARAAAMBgCIAAAAAGQwAEAAAwGAIgAACAwRAAAQAADIYACAAAYDAEQAAAAIMhAAIAABgMARAAAMBgCIAAAAAG45MBcOnSpZowYYI6duyogIAAmUwmLVmyxO1+7Ha73n33XbVt21bVq1dXvXr19PDDD+uXX34p9ZjExET16tVLwcHBCgkJUUxMjJKTkz24GgAAAN/ikwFw2rRpWrhwoY4fP67bb7/9hvuZMGGCnnvuOTkcDj333HMaMGCA/vWvf6lTp07KzMws1n7p0qUaMGCA9u/frzFjxmj06NHat2+f+vfvry+++MKTSwIAAPAZJofD4ajsQfzRDz/8oBYtWigsLExvvPGGpkyZovj4eI0ZM6bcfWzYsEF9+vRRz549lZSUpGrVqkmS1qxZo4EDByo2NlaJiYnO9r/99psiIiLk5+enXbt2qUmTJpKk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AwcOFLt1u3PnzmJ9FxYW6q9//asOHz6smJgY3X777Td8XgAAgKqqwh8sM5lMbrX38/PT4sWLFRcXp549e7p8ku348eOaO3euy2fcpkyZooSEhGJf/OjYsaPatWundu3aqXHjxrpw4YJSU1N16NAhNWnSRIsXL/bovAAAAFWVRzOAbdq00apVq5STk1Pi/kuXLmnVqlVq06aNW/3GxMRo06ZN6tatm1asWKH3339fDRo00GeffVbu7/FOnjxZwcHBSkpK0t///nctX75c1atX17Rp07Rnzx5FRERUyHkBAAB8nUevgYmPj9eTTz6pNm3aaMaMGerVq5fq1q2r7OxspaSkaObMmfr3v/+tjz/+WKNHj/bmuKsEvgUMAACKVNlvAf/R448/rl27dmnBggUaPny4pKvLmIveS+NwOPTss88aMvwBAAD4Ko+fAXznnXc0bNiwEl8EPXr0aPXo0cMb4wQAAICXeBQA09LSFBISoh49ehD0AAAAqgiPFoHExMRo4cKF3hoLAAAAbgKPAmD9+vUVGBjorbEAAADgJvAoAPbv318pKSnyYCExAAAAbjKPAuAbb7yh8+fPa/z48bpw4YK3xgQAAIAK5NEikEcffVS1atXSxx9/rKVLl6p58+Zq0KBBsa9/mEwmJScnezRQAAAAeIdHATAlJcX5c15eng4cOKADBw4Ua+fu5+AAAABQcTwKgEUvfAYAAEDVcUPPAKanp6tPnz4KDg5WaGio+vfvr+3bt3t7bAAAAKgAbs8A/vzzz+rbt68uX77srCUnJ2vLli3avn272rRp49UBAgAAwLvcngF84403dPnyZb388ss6c+aMzpw5o1deeUW///673nzzzYoYIwAAALzI7RnAjRs3qnv37nr99dedtZkzZyolJUWpqaleHRwAAAC8z+0ZwLNnz6pLly7F6p07d9bZs2e9MigAAABUHLcDYH5+vmrWrFmsHhQUpPz8fK8MCgAAABXHoy+BAAAAoOq5ofcALl26VFu3bnWpHT58WJI0cODAYu1NJpNWr159I6cCAACAl91QADx8+LAz8P3R2rVri9X4EggAAIDvcDsAHj16tCLGAQAAgJvE7QAYFhZWEeMAAADATcIiEAAAAIMhAAIAABgMARAAAMBgCIAAAAAGQwAEAAAwGAIgAACAwRAAAQAADIYACAAAYDAEQAAAAIMhAAIA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",
"text/plain": [
"<Figure size 700x500 with 1 Axes>"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"backend = Aer.get_backend('aer_simulator')\n",
"\n",
"job = qiskit.execute(qc, backend)\n",
"result = job.result()\n",
"counts = result.get_counts()\n",
"plot_histogram(counts)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Putting It All Together\n",
"\n",
"Creating a wrapper method to setup the quantum circuit, encode the input qubits, and return the result."
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"def dj(arr):\n",
" n = len(arr)\n",
"\n",
" qr = QuantumRegister(n, 'qr')\n",
" aux = QuantumRegister(1, 'aux')\n",
" cr = ClassicalRegister(1, 'cr')\n",
" qc = QuantumCircuit(qr, aux, cr)\n",
"\n",
" # Set the output qubit to 1 and place it in superposition.\n",
" qc.x(aux)\n",
" qc.h(aux)\n",
"\n",
" # Set each input qubit to superposition.\n",
" qc.h(qr)\n",
"\n",
" qc.barrier()\n",
"\n",
" # Apply the oracle, encoding input qubits with a value of 1 as a control and the output qubit as the target.\n",
" qc.append(oracle(qr, aux, arr), range(len(qr) + 1))\n",
"\n",
" qc.barrier()\n",
"\n",
" # Bring the qubits out of superposition\n",
" qc.h(qr)\n",
" qc.h(aux)\n",
"\n",
" qc.barrier()\n",
"\n",
" # Invert the output qubit back to 0.\n",
" qc.x(aux)\n",
"\n",
" # Invert the output to 1 if all inputs are 1.\n",
" qc.mcx(qr, aux)\n",
" qc.x(qr)\n",
" qc.mcx(qr, aux)\n",
"\n",
" qc.x(qr)\n",
"\n",
" # Measure the output qubit.\n",
" qc.measure(aux, cr)\n",
"\n",
" # Execute the circuit.\n",
" backend = Aer.get_backend('aer_simulator')\n",
"\n",
" job = qiskit.execute(qc, backend)\n",
" result = job.result()\n",
" counts = result.get_counts()\n",
" \n",
" return counts\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Let's See It Run!"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAGwCAYAAAA5X9QTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyiUlEQVR4nO3deVhV9d7//9feGwRFQMspFSEKtWMamqI4hgOY1e2t5tQptXKo7tPJ9OouTVPrUrOjJys75VBKRy0tT6Mpkgqk4lA55XHAGW9FJROE64jA3r8//LJ+7hhkuzeycT0f18V1sd7rsz7rs7A/Xn3W+qxlcTgcDgEAAMA0rJU9AAAAANxcBEAAAACTIQACAACYDAEQAADAZAiAAAAAJkMABAAAMBkCIAAAgMn4VPYAbmV2u12nT59WYGCgLBZLZQ8HAADcwhwOhy5duqSGDRvKai17jo8AWIFOnz6tkJCQyh4GAAAwkfT0dDVu3LjMNgTAChQYGCjp6j9EUFBQJY8GAADcyrKzsxUSEmLkj7IQACtQ0W3foKAgAiAAALgpyvPYGYtAAAAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAelJKSokceeUQNGzaUxWLRV199dd1jkpKS1KZNG/n5+enuu+/WkiVLirV5//33FRYWJn9/f7Vv317bt2932n/58mX9z//8j26//XbVrFlTAwYM0NmzZz10VQBuNQRAAPCg3Nxc3XfffXr//ffL1f7YsWN66KGHFBMTo127dmns2LEaOXKkEhISjDYrVqzQuHHjNGXKFP3yyy+67777FBcXp3PnzhltXnzxRX377bf6/PPPlZycrNOnT6t///4evz4AtwaLw+FwVPYgblXZ2dkKDg5WVlaWgoKCKns4AG4yi8WiL7/8Uv/93/9dapuXX35Zq1ev1q+//mrUhgwZoosXL2rt2rWSpPbt26tdu3aaN2+eJMlutyskJETPP/+8XnnlFWVlZalu3bpavny5Hn30UUnSgQMHdM899yg1NVUdOnSouIsE4DVcyR3MAAJAJUpNTVXPnj2danFxcUpNTZUkXblyRT///LNTG6vVqp49exptfv75Z+Xn5zu1ad68uZo0aWK0AYBrEQABoBJlZGSofv36TrX69esrOztb//nPf5SZmanCwsIS22RkZBh9VKtWTbVq1Sq1DQBciwAIAABgMj6VPQAAMLMGDRoUW6179uxZBQUFqXr16rLZbLLZbCW2adCggdHHlStXdPHiRadZwGvbAMC1mAEEgEoUHR2t9evXO9USExMVHR0tSapWrZruv/9+pzZ2u13r16832tx///3y9fV1anPw4EGdPHnSaAMA12IGEAA8KCcnR4cPHza2jx07pl27dum2225TkyZNNGHCBP3f//2fPvnkE0nSM888o3nz5ul///d/9dRTT2nDhg1auXKlVq9ebfQxbtw4DR8+XG3btlVUVJTmzp2r3NxcPfnkk5Kk4OBgPf300xo3bpxuu+02BQUF6fnnn1d0dDQrgAGUiAAIAB70008/KSYmxtgeN26cJGn48OFasmSJzpw5o5MnTxr777zzTq1evVovvvii3nnnHTVu3FiLFi1SXFyc0Wbw4ME6f/68XnvtNWVkZCgyMlJr1651Whjy9ttvy2q1asCAAcrLy1NcXJz+8Y9/3IQrBlAV8R7ACsR7AAEAwM3CewABAABQKgIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDJeGQCXLl2qMWPGqG3btvLz85PFYtGSJUtc7sdut+u9995Ty5YtVb16ddWtW1dDhw7V0aNHSz0mISFB3bp1U2BgoIKCghQTE6P169e7cTUAAADexSsD4KRJk7RgwQKdOHFCd9xxxw33M2bMGP31r3+Vw+HQX//6V/Xu3Vv/+te/1K5dO6WlpRVrv3TpUvXu3Vv79+/XiBEjNHz4cO3bt0+9evXSF1984c4lAQAAeA2Lw+FwVPYg/uiHH35QRESEQkND9eabb2rChAlavHixRowYUe4+Nm7cqO7du6tr165KTExUtWrVJElr1qxRnz59FBsbq4SEBKP977//rvDwcPn4+Gjnzp1q3Lix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1bJly3T//fdX1pAB3GJYBAIAN9m+fftUs2ZNRURESLr6PGDRgpDCwkJJUsuWLRUfH68333xThw4d0rx58ypzyABuMQRAALjJWrdurWPHjiknJ0eS5ONzdT2exWKRzWaT9P+/GuaFF15Q//79tWHDBh09erRyBgzglkMABICbLCYmRpL05z//WRs2bNCVK1dKbFc0G9isWTNlZmYagREA3EUABICbrEOHDho3bpx2796tv/zlL1q4cKHOnj3r1KZoNvD333/XqVOnFBAQoFatWlXSiAHcalgEAgCVZP78+frb3/6mo0ePqmHDhurXr58efPBBhYSEyGazqVatWnrvvfc0d+5cPffcc5ozZ05lDxnALYIACACVxOFw6PDhw1q4cKE+++wznTp1SpJUr149+fr66syZM7Lb7Ro6dKhmzZqlxo0bV/KIAdwqCIAA4AVyc3O1fft2ffPNNzp9+rTOnTunoKAgDRo0SAMGDJC/v39lDxHALYQACABeJj8/X76+vpU9DAC3MAIgAACAybAKGAAAwGQIgAAAACZDAAQAADAZAiAAAIDJEAABAABMhgAIAABgMgRAAAAAkyEAAgAAmAwBEAAAwGQIgAAAACbz/wHPPvHtjqDE/wAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 700x500 with 1 Axes>"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"counts = dj('100')\n",
"plot_histogram(counts)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAGwCAYAAAA5X9QTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyJElEQVR4nO3deXQUZb7/8U93JyQQkgCyyZYQZVEEA0Ig7GFJGMTLRWTRq4DKos6oCMfrgCigB9C5OILiqICGOICCMq4IIQaSsIRFJCAMS0CWMCwSkG6SIyFJ9+8PfulDm4U03SEd6v06h3NS33rqqacCf3x4qp4qk8PhcAgAAACGYa7sAQAAAODmIgACAAAYDAEQAADAYAiAAAAABkMABAAAMBgCIAAAgMEQAAEAAAzGr7IHcCuz2+06deqUgoODZTKZKns4AADgFuZwOHTp0iU1atRIZnPZc3wEwAp06tQpNW3atLKHAQAADCQrK0tNmjQpsw0BsAIFBwdLuvoXERISUsmjAQAAtzKbzaamTZs680dZCIAVqOi2b0hICAEQAADcFOV57IxFIAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAL0pLS9MDDzygRo0ayWQy6auvvrruMSkpKerQoYMCAgJ05513asmSJcXavPfeewoPD1dgYKA6d+6s7du3u+y/fPmy/vznP+u2225TzZo1NXToUJ09e9ZLVwXgVkMABAAvys3N1b333qv33nuvXO2PHj2q+++/XzExMcrIyNDEiRM1duxYJSYmOtusWLFCkyZN0vTp0/XTTz/p3nvvVVxcnH799VdnmxdeeEHffvutPv/8c6WmpurUqVN68MEHvX59AG4NJofD4ajsQdyqbDabQkNDZbVaFRISUtnDAXCTmUwmffnll/rv//7vUtu89NJLWr16tfbu3eusjRw5UhcvXtTatWslSZ07d1anTp20YMECSZLdblfTpk317LPP6q9//ausVqvq1aun5cuX66GHHpIkHThwQHfddZfS09PVpUuXirtIAD7DndzBDCAAVKL09HT169fPpRYXF6f09HRJ0pUrV7Rz506XNmazWf369XO22blzp/Lz813atG7dWs2aNXO2AYBrEQABoBKdOXNGDRo0cKk1aNBANptNv//+u7Kzs1VYWFhimzNnzjj7qFatmmrVqlVqGwC4FgEQAADAYPwqewAAYGQNGzYstlr37NmzCgkJUfXq1WWxWGSxWEps07BhQ2cfV65c0cWLF11mAa9tAwDXYgYQACpRdHS0kpOTXWpJSUmKjo6WJFWrVk333XefSxu73a7k5GRnm/vuu0/+/v4ubQ4ePKgTJ0442wDAtZgBBAAvysnJ0eHDh53bR48eVUZGhurUqaNmzZppypQp+s9//qNPPvlEkvTUU09pwYIF+t///V898cQTWr9+vVauXKnVq1c7+5g0aZJGjx6tjh07KioqSvPmzVNubq4ef/xxSVJoaKiefPJJTZo0SXXq1FFISIieffZZRUdHswIYQIkIgADgRT/++KNiYmKc25MmTZIkjR49WkuWLNHp06d14sQJ5/7mzZtr9erVeuGFFzR//nw1adJEixcvVlxcnLPNiBEjdO7cOb366qs6c+aMIiMjtXbtWpeFIW+//bbMZrOGDh2qvLw8xcXF6R//+MdNuGIAVRHvAaxAvAcQAADcLLwHEAAAAKUiAAIAABgMARAAAMBgCIAAAAAGQwAEAAAwGAIgAACAwRAAAQAADIYACAAAYDAEQAAAAIMhAAIAABgMARAAAMBgCIAAAAAG45MBcOnSpZowYYI6duyogIAAmUwmLVmyxO1+7Ha73n33XbVt21bVq1dXvXr19PDDD+uXX34p9ZjExET16tVLwcHBCgkJUUxMjJKTkz24GgAAAN/ikwFw2rRpWrhwoY4fP67bb7/9hvuZMGGCnnvuOTkcDj333HMaMGCA/vWvf6lTp07KzMws1n7p0qUaMGCA9u/frzFjxmj06NHat2+f+vfvry+++MKTSwIAAPAZJofD4ajsQfzRDz/8oBYtWigsLExvvPGGpkyZovj4eI0ZM6bcfWzYsEF9+vRRz549lZSUpGrVqkmS1qxZo4EDByo2NlaJiYnO9r/99psiIiLk5+enXbt2qUmTJpKk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AwcOFLt1u3PnzmJ9FxYW6q9//asOHz6smJgY3X777Td8XgAAgKqqwh8sM5lMbrX38/PT4sWLFRcXp549e7p8ku348eOaO3euy2fcpkyZooSEhGJf/OjYsaPatWundu3aqXHjxrpw4YJSU1N16NAhNWnSRIsXL/bovAAAAFWVRzOAbdq00apVq5STk1Pi/kuXLmnVqlVq06aNW/3GxMRo06ZN6tatm1asWKH3339fDRo00GeffVbu7/FOnjxZwcHBSkpK0t///nctX75c1atX17Rp07Rnzx5FRERUyHkBAAB8nUevgYmPj9eTTz6pNm3aaMaMGerVq5fq1q2r7OxspaSkaObMmfr3v/+tjz/+WKNHj/bmuKsEvgUMAACKVNlvAf/R448/rl27dmnBggUaPny4pKvLmIveS+NwOPTss88aMvwBAAD4Ko+fAXznnXc0bNiwEl8EPXr0aPXo0cMb4wQAAICXeBQA09LSFBISoh49ehD0AAAAqgiPFoHExMRo4cKF3hoLAAAAbgKPAmD9+vUVGBjorbEAAADgJvAoAPbv318pKSnyYCExAAAAbjKPAuAbb7yh8+fPa/z48bpw4YK3xgQAAIAK5NEikEcffVS1atXSxx9/rKVLl6p58+Zq0KBBsa9/mEwmJScnezRQAAAAeIdHATAlJcX5c15eng4cOKADBw4Ua+fu5+AAAABQcTwKgEUvfAYAAEDVcUPPAKanp6tPnz4KDg5WaGio+vfvr+3bt3t7bAAAAKgAbs8A/vzzz+rbt68uX77srCUnJ2vLli3avn272rRp49UBAgAAwLvcngF84403dPnyZb388ss6c+aMzpw5o1deeUW///673nzzzYoYIwAAALzI7RnAjRs3qnv37nr99dedtZkzZyolJUWpqaleHRwAAAC8z+0ZwLNnz6pLly7F6p07d9bZs2e9MigAAABUHLcDYH5+vmrWrFmsHhQUpPz8fK8MCgAAABXHoy+BAAAAoOq5ofcALl26VFu3bnWpHT58WJI0cODAYu1NJpNWr159I6cCAACAl91QADx8+LAz8P3R2rVri9X4EggAAIDvcDsAHj16tCLGAQAAgJvE7QAYFhZWEeMAAADATcIiEAAAAIMhAAIAABgMARAAAMBgCIAAAAAGQwAEAAAwGAIgAACAwRAAAQAADIYACAAAYDAEQAAAAIMhAAIA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",
"text/plain": [
"<Figure size 700x500 with 1 Axes>"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"counts = dj('111')\n",
"plot_histogram(counts)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAGwCAYAAAA5X9QTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyJElEQVR4nO3deXQUZb7/8U93JyQQkgCyyZYQZVEEA0Ig7GFJGMTLRWTRq4DKos6oCMfrgCigB9C5OILiqICGOICCMq4IIQaSsIRFJCAMS0CWMCwSkG6SIyFJ9+8PfulDm4U03SEd6v06h3NS33rqqacCf3x4qp4qk8PhcAgAAACGYa7sAQAAAODmIgACAAAYDAEQAADAYAiAAAAABkMABAAAMBgCIAAAgMEQAAEAAAzGr7IHcCuz2+06deqUgoODZTKZKns4AADgFuZwOHTp0iU1atRIZnPZc3wEwAp06tQpNW3atLKHAQAADCQrK0tNmjQpsw0BsAIFBwdLuvoXERISUsmjAQAAtzKbzaamTZs680dZCIAVqOi2b0hICAEQAADcFOV57IxFIAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAADAYAiAAAIDBEAABAAAMhgAIAABgMARAAAAAgyEAAgAAGAwBEAAAwGAIgAAAAAZDAAQAL0pLS9MDDzygRo0ayWQy6auvvrruMSkpKerQoYMCAgJ05513asmSJcXavPfeewoPD1dgYKA6d+6s7du3u+y/fPmy/vznP+u2225TzZo1NXToUJ09e9ZLVwXgVkMABAAvys3N1b333qv33nuvXO2PHj2q+++/XzExMcrIyNDEiRM1duxYJSYmOtusWLFCkyZN0vTp0/XTTz/p3nvvVVxcnH799VdnmxdeeEHffvutPv/8c6WmpurUqVN68MEHvX59AG4NJofD4ajsQdyqbDabQkNDZbVaFRISUtnDAXCTmUwmffnll/rv//7vUtu89NJLWr16tfbu3eusjRw5UhcvXtTatWslSZ07d1anTp20YMECSZLdblfTpk317LPP6q9//ausVqvq1aun5cuX66GHHpIkHThwQHfddZfS09PVpUuXirtIAD7DndzBDCAAVKL09HT169fPpRYXF6f09HRJ0pUrV7Rz506XNmazWf369XO22blzp/Lz813atG7dWs2aNXO2AYBrEQABoBKdOXNGDRo0cKk1aNBANptNv//+u7Kzs1VYWFhimzNnzjj7qFatmmrVqlVqGwC4FgEQAADAYPwqewAAYGQNGzYstlr37NmzCgkJUfXq1WWxWGSxWEps07BhQ2cfV65c0cWLF11mAa9tAwDXYgYQACpRdHS0kpOTXWpJSUmKjo6WJFWrVk333XefSxu73a7k5GRnm/vuu0/+/v4ubQ4ePKgTJ0442wDAtZgBBAAvysnJ0eHDh53bR48eVUZGhurUqaNmzZppypQp+s9//qNPPvlEkvTUU09pwYIF+t///V898cQTWr9+vVauXKnVq1c7+5g0aZJGjx6tjh07KioqSvPmzVNubq4ef/xxSVJoaKiefPJJTZo0SXXq1FFISIieffZZRUdHswIYQIkIgADgRT/++KNiYmKc25MmTZIkjR49WkuWLNHp06d14sQJ5/7mzZtr9erVeuGFFzR//nw1adJEixcvVlxcnLPNiBEjdO7cOb366qs6c+aMIiMjtXbtWpeFIW+//bbMZrOGDh2qvLw8xcXF6R//+MdNuGIAVRHvAaxAvAcQAADcLLwHEAAAAKUiAAIAABgMARAAAMBgCIAAAAAGQwAEAAAwGAIgAACAwRAAAQAADIYACAAAYDAEQAAAAIMhAAIAABgMARAAAMBgCIAAAAAG45MBcOnSpZowYYI6duyogIAAmUwmLVmyxO1+7Ha73n33XbVt21bVq1dXvXr19PDDD+uXX34p9ZjExET16tVLwcHBCgkJUUxMjJKTkz24GgAAAN/ikwFw2rRpWrhwoY4fP67bb7/9hvuZMGGCnnvuOTkcDj333HMaMGCA/vWvf6lTp07KzMws1n7p0qUaMGCA9u/frzFjxmj06NHat2+f+vfvry+++MKTSwIAAPAZJofD4ajsQfzRDz/8oBYtWigsLExvvPGGpkyZovj4eI0ZM6bcfWzYsEF9+vRRz549lZSUpGrVqkmS1qxZo4EDByo2NlaJiYnO9r/99psiIiLk5+enXbt2qUmTJpKk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AwcOFLt1u3PnzmJ9FxYW6q9//asOHz6smJgY3X777Td8XgAAgKqqwh8sM5lMbrX38/PT4sWLFRcXp549e7p8ku348eOaO3euy2fcpkyZooSEhGJf/OjYsaPatWundu3aqXHjxrpw4YJSU1N16NAhNWnSRIsXL/bovAAAAFWVRzOAbdq00apVq5STk1Pi/kuXLmnVqlVq06aNW/3GxMRo06ZN6tatm1asWKH3339fDRo00GeffVbu7/FOnjxZwcHBSkpK0t///nctX75c1atX17Rp07Rnzx5FRERUyHkBAAB8nUevgYmPj9eTTz6pNm3aaMaMGerVq5fq1q2r7OxspaSkaObMmfr3v/+tjz/+WKNHj/bmuKsEvgUMAACKVNlvAf/R448/rl27dmnBggUaPny4pKvLmIveS+NwOPTss88aMvwBAAD4Ko+fAXznnXc0bNiwEl8EPXr0aPXo0cMb4wQAAICXeBQA09LSFBISoh49ehD0AAAAqgiPFoHExMRo4cKF3hoLAAAAbgKPAmD9+vUVGBjorbEAAADgJvAoAPbv318pKSnyYCExAAAAbjKPAuAbb7yh8+fPa/z48bpw4YK3xgQAAIAK5NEikEcffVS1atXSxx9/rKVLl6p58+Zq0KBBsa9/mEwmJScnezRQAAAAeIdHATAlJcX5c15eng4cOKADBw4Ua+fu5+AAAABQcTwKgEUvfAYAAEDVcUPPAKanp6tPnz4KDg5WaGio+vfvr+3bt3t7bAAAAKgAbs8A/vzzz+rbt68uX77srCUnJ2vLli3avn272rRp49UBAgAAwLvcngF84403dPnyZb388ss6c+aMzpw5o1deeUW///673nzzzYoYIwAAALzI7RnAjRs3qnv37nr99dedtZkzZyolJUWpqaleHRwAAAC8z+0ZwLNnz6pLly7F6p07d9bZs2e9MigAAABUHLcDYH5+vmrWrFmsHhQUpPz8fK8MCgAAABXHoy+BAAAAoOq5ofcALl26VFu3bnWpHT58WJI0cODAYu1NJpNWr159I6cCAACAl91QADx8+LAz8P3R2rVri9X4EggAAIDvcDsAHj16tCLGAQAAgJvE7QAYFhZWEeMAAADATcIiEAAAAIMhAAIAABgMARAAAMBgCIAAAAAGQwAEAAAwGAIgAACAwRAAAQAADIYACAAAYDAEQAAAAIMhAAIA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",
"text/plain": [
"<Figure size 700x500 with 1 Axes>"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"counts = dj('00000')\n",
"plot_histogram(counts)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAGwCAYAAAA5X9QTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyiUlEQVR4nO3deVhV9d7//9feGwRFQMspFSEKtWMamqI4hgOY1e2t5tQptXKo7tPJ9OouTVPrUrOjJys75VBKRy0tT6Mpkgqk4lA55XHAGW9FJROE64jA3r8//LJ+7hhkuzeycT0f18V1sd7rsz7rs7A/Xn3W+qxlcTgcDgEAAMA0rJU9AAAAANxcBEAAAACTIQACAACYDAEQAADAZAiAAAAAJkMABAAAMBkCIAAAgMn4VPYAbmV2u12nT59WYGCgLBZLZQ8HAADcwhwOhy5duqSGDRvKai17jo8AWIFOnz6tkJCQyh4GAAAwkfT0dDVu3LjMNgTAChQYGCjp6j9EUFBQJY8GAADcyrKzsxUSEmLkj7IQACtQ0W3foKAgAiAAALgpyvPYGYtAAAAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAelJKSokceeUQNGzaUxWLRV199dd1jkpKS1KZNG/n5+enuu+/WkiVLirV5//33FRYWJn9/f7Vv317bt2932n/58mX9z//8j26//XbVrFlTAwYM0NmzZz10VQBuNQRAAPCg3Nxc3XfffXr//ffL1f7YsWN66KGHFBMTo127dmns2LEaOXKkEhISjDYrVqzQuHHjNGXKFP3yyy+67777FBcXp3PnzhltXnzxRX377bf6/PPPlZycrNOnT6t///4evz4AtwaLw+FwVPYgblXZ2dkKDg5WVlaWgoKCKns4AG4yi8WiL7/8Uv/93/9dapuXX35Zq1ev1q+//mrUhgwZoosXL2rt2rWSpPbt26tdu3aaN2+eJMlutyskJETPP/+8XnnlFWVlZalu3bpavny5Hn30UUnSgQMHdM899yg1NVUdOnSouIsE4DVcyR3MAAJAJUpNTVXPnj2danFxcUpNTZUkXblyRT///LNTG6vVqp49exptfv75Z+Xn5zu1ad68uZo0aWK0AYBrEQABoBJlZGSofv36TrX69esrOztb//nPf5SZmanCwsIS22RkZBh9VKtWTbVq1Sq1DQBciwAIAABgMj6VPQAAMLMGDRoUW6179uxZBQUFqXr16rLZbLLZbCW2adCggdHHlStXdPHiRadZwGvbAMC1mAEEgEoUHR2t9evXO9USExMVHR0tSapWrZruv/9+pzZ2u13r16832tx///3y9fV1anPw4EGdPHnSaAMA12IGEAA8KCcnR4cPHza2jx07pl27dum2225TkyZNNGHCBP3f//2fPvnkE0nSM888o3nz5ul///d/9dRTT2nDhg1auXKlVq9ebfQxbtw4DR8+XG3btlVUVJTmzp2r3NxcPfnkk5Kk4OBgPf300xo3bpxuu+02BQUF6fnnn1d0dDQrgAGUiAAIAB70008/KSYmxtgeN26cJGn48OFasmSJzpw5o5MnTxr777zzTq1evVovvvii3nnnHTVu3FiLFi1SXFyc0Wbw4ME6f/68XnvtNWVkZCgyMlJr1651Whjy9ttvy2q1asCAAcrLy1NcXJz+8Y9/3IQrBlAV8R7ACsR7AAEAwM3CewABAABQKgIgAACAyRAAAQAATIYACAAAYDIEQAAAAJMhAAIAAJgMARAAAMBkCIAAAAAmQwAEAAAwGQIgAACAyRAAAQAATIYACAAAYDJeGQCXLl2qMWPGqG3btvLz85PFYtGSJUtc7sdut+u9995Ty5YtVb16ddWtW1dDhw7V0aNHSz0mISFB3bp1U2BgoIKCghQTE6P169e7cTUAAADexSsD4KRJk7RgwQKdOHFCd9xxxw33M2bMGP31r3+Vw+HQX//6V/Xu3Vv/+te/1K5dO6WlpRVrv3TpUvXu3Vv79+/XiBEjNHz4cO3bt0+9evXSF1984c4lAQAAeA2Lw+FwVPYg/uiHH35QRESEQkND9eabb2rChAlavHixRowYUe4+Nm7cqO7du6tr165KTExUtWrVJElr1qxRnz59FBsbq4SEBKP977//rvDwcPn4+Gjnzp1q3Lix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1bJly3T//fdX1pAB3GJYBAIAN9m+fftUs2ZNRURESLr6PGDRgpDCwkJJUsuWLRUfH68333xThw4d0rx58ypzyABuMQRAALjJWrdurWPHjiknJ0eS5ONzdT2exWKRzWaT9P+/GuaFF15Q//79tWHDBh09erRyBgzglkMABICbLCYmRpL05z//WRs2bNCVK1dKbFc0G9isWTNlZmYagREA3EUABICbrEOHDho3bpx2796tv/zlL1q4cKHOnj3r1KZoNvD333/XqVOnFBAQoFatWlXSiAHcalgEAgCVZP78+frb3/6mo0ePqmHDhurXr58efPBBhYSEyGazqVatWnrvvfc0d+5cPffcc5ozZ05lDxnALYIACACVxOFw6PDhw1q4cKE+++wznTp1SpJUr149+fr66syZM7Lb7Ro6dKhmzZqlxo0bV/KIAdwqCIAA4AVyc3O1fft2ffPNNzp9+rTOnTunoKAgDRo0SAMGDJC/v39lDxHALYQACABeJj8/X76+vpU9DAC3MAIgAACAybAKGAAAwGQIgAAAACZDAAQAADAZAiAAAIDJEAABAABMhgAIAABgMgRAAAAAkyEAAgAAmAwBEAAAwGQIgAAAACbz/wHPPvHtjqDE/wAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 700x500 with 1 Axes>"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"counts = dj('10110010101100')\n",
"plot_histogram(counts)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "75774a4d1e0bcbf4666b8a1bfefde1c0d65936609909b44c914368a9a5667035"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment