{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Coin flipping\n", "\n", "***\n", "\n", "The ideas behind flipping a coin are important in computing.\n", "\n", "Computers rely on bits - a bit is a variable that can take on one of two values, one or zero.\n", "\n", "Flipping a coin results in one of two outcomes, heads or tails.\n", "\n", "***" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# We'll use numpy and scipy.stats to analyse flipping a coin.\n", "import numpy as np\n", "import scipy.stats as ss\n", "\n", "# We'll use this for visualisation.\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# This just sets the default plot size to be bigger.\n", "plt.rcParams['figure.figsize'] = (12, 8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "A fair coin will give a head fifty percent of the time and a tail fifty percent of the time.\n", "\n", "We say the probability of a head is 0.5 and the probability of a tail is 0.5.\n", "\n", "We can use the following function to simulate this - giving a 1 for a head and 0 for a tail.\n", "\n", "***" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# (Number of times to flip a coin, probability of a head, number of times to do this)\n", "np.random.binomial(1, 0.5, 1)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([492])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Flip a fair coin 1000 times - how many heads?\n", "np.random.binomial(1000, 0.5, 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "How likely are we to see a certain number of heads when flipping a coin however many times?\n", "\n", "***" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.010448505831422978" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# (No. of heads, no. of flips, probability of a head)\n", "ss.binom.pmf(521, 1000, 0.5)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\mclou\\Anaconda3\\lib\\site-packages\\scipy\\stats\\stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n", " return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.distplot(np.random.binomial(1000, 0.5, 1000))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "What about an unfair coin?\n", "\n", "***" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Flip an unfair coin 10 times - how many heads?\n", "np.random.binomial(10, 0.2, 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "Suppose we flip an unfair coin ($p = 0.3$) ten times, what is the probability that the flips are as follows?\n", "\n", "$$ HHTTHHHTTT $$\n", "\n", "***" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0004084101" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(0.3)*(0.3)*(1.0-0.3)*(1.0-0.3)*(0.3)*(0.3)*(0.3)*(1.0-0.3)*(1.0-0.3)*(1.0-0.3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "The probability of $r$ heads when flipping an unfair coin $n$ times is\n", "\n", "$$ p(r \\mid n , p) = {n \\choose r} p^r (1-p)^{(n-r)} $$\n", "\n", "***" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0.028247524900000005,\n", " 0.12106082100000018,\n", " 0.2334744405,\n", " 0.26682793200000016,\n", " 0.20012094900000013,\n", " 0.10291934520000007,\n", " 0.03675690899999999,\n", " 0.009001692000000002,\n", " 0.0014467004999999982,\n", " 0.00013778100000000015,\n", " 5.904899999999995e-06]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "noflips = 10\n", "\n", "p = 0.3\n", "\n", "d = [ss.binom.pmf(i, noflips, p) for i in range(noflips+1)]\n", "d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "$ {n \\choose r} $ is the number of ways to select $r$ items from $n$, ignoring the order you select them in.\n", "\n", "***" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "210.0" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import math\n", "\n", "n = 10\n", "r = 6\n", "\n", "choose = lambda x, y: math.factorial(x) / (math.factorial(y) * math.factorial(x-y))\n", "\n", "choose(n, r)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "Note the following for ${n \\choose 0}$ and ${n \\choose n}$.\n", "\n", "***" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "choose(10, 0)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "choose(n, n)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "Even though the chances are, with $p = 0.3$ and $10$ flips, that there are three heads, the most probable outcome is all tails.\n", "\n", "***" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.02824752489999998" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(1-0.3)**10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "What has all of this got to do with computers and bits?\n", "\n", "Would you consider the following a data set?\n", "\n", "***" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['0000000000',\n", " '0000000001',\n", " '0000000010',\n", " '0000000011',\n", " '0000000100',\n", " '0000000101',\n", " '0000000110',\n", " '0000000111',\n", " '0000001000',\n", " '0000001001',\n", " '0000001010',\n", " '0000001011',\n", " '0000001100',\n", " '0000001101',\n", " '0000001110',\n", " '0000001111',\n", " '0000010000',\n", " '0000010001',\n", " '0000010010',\n", " '0000010011',\n", " '0000010100',\n", " '0000010101',\n", " '0000010110',\n", " '0000010111',\n", " '0000011000',\n", " '0000011001',\n", " '0000011010',\n", " '0000011011',\n", " '0000011100',\n", " '0000011101',\n", " '0000011110',\n", " '0000011111',\n", " '0000100000',\n", " '0000100001',\n", " '0000100010',\n", " '0000100011',\n", " '0000100100',\n", " '0000100101',\n", " '0000100110',\n", " '0000100111',\n", " '0000101000',\n", " '0000101001',\n", " '0000101010',\n", " '0000101011',\n", " '0000101100',\n", " '0000101101',\n", " '0000101110',\n", " '0000101111',\n", " '0000110000',\n", " '0000110001',\n", " '0000110010',\n", " '0000110011',\n", " '0000110100',\n", " '0000110101',\n", " '0000110110',\n", " '0000110111',\n", " '0000111000',\n", " '0000111001',\n", " '0000111010',\n", " '0000111011',\n", " '0000111100',\n", " '0000111101',\n", " '0000111110',\n", " '0000111111',\n", " '0001000000',\n", " '0001000001',\n", " '0001000010',\n", " '0001000011',\n", " '0001000100',\n", " '0001000101',\n", " '0001000110',\n", " '0001000111',\n", " '0001001000',\n", " '0001001001',\n", " '0001001010',\n", " '0001001011',\n", " '0001001100',\n", " '0001001101',\n", " '0001001110',\n", " '0001001111',\n", " '0001010000',\n", " '0001010001',\n", " '0001010010',\n", " '0001010011',\n", " '0001010100',\n", " '0001010101',\n", " '0001010110',\n", " '0001010111',\n", " '0001011000',\n", " '0001011001',\n", " '0001011010',\n", " '0001011011',\n", " '0001011100',\n", " '0001011101',\n", " '0001011110',\n", " '0001011111',\n", " '0001100000',\n", " '0001100001',\n", " '0001100010',\n", " '0001100011',\n", " '0001100100',\n", " '0001100101',\n", " '0001100110',\n", " '0001100111',\n", " '0001101000',\n", " '0001101001',\n", " '0001101010',\n", " '0001101011',\n", " '0001101100',\n", " '0001101101',\n", " '0001101110',\n", " '0001101111',\n", " '0001110000',\n", " '0001110001',\n", " '0001110010',\n", " '0001110011',\n", " '0001110100',\n", " '0001110101',\n", " '0001110110',\n", " '0001110111',\n", " '0001111000',\n", " '0001111001',\n", " '0001111010',\n", " '0001111011',\n", " '0001111100',\n", " '0001111101',\n", " '0001111110',\n", " '0001111111',\n", " '0010000000',\n", " '0010000001',\n", " '0010000010',\n", " '0010000011',\n", " '0010000100',\n", " '0010000101',\n", " '0010000110',\n", " '0010000111',\n", " '0010001000',\n", " '0010001001',\n", " '0010001010',\n", " '0010001011',\n", " '0010001100',\n", " '0010001101',\n", " '0010001110',\n", " '0010001111',\n", " '0010010000',\n", " '0010010001',\n", " '0010010010',\n", " '0010010011',\n", " '0010010100',\n", " '0010010101',\n", " '0010010110',\n", " '0010010111',\n", " '0010011000',\n", " '0010011001',\n", " '0010011010',\n", " '0010011011',\n", " '0010011100',\n", " '0010011101',\n", " '0010011110',\n", " '0010011111',\n", " '0010100000',\n", " '0010100001',\n", " '0010100010',\n", " '0010100011',\n", " '0010100100',\n", " '0010100101',\n", " '0010100110',\n", " '0010100111',\n", " '0010101000',\n", " '0010101001',\n", " '0010101010',\n", " '0010101011',\n", " '0010101100',\n", " '0010101101',\n", " '0010101110',\n", " '0010101111',\n", " '0010110000',\n", " '0010110001',\n", " '0010110010',\n", " '0010110011',\n", " '0010110100',\n", " '0010110101',\n", " '0010110110',\n", " '0010110111',\n", " '0010111000',\n", " '0010111001',\n", " '0010111010',\n", " '0010111011',\n", " '0010111100',\n", " '0010111101',\n", " '0010111110',\n", " '0010111111',\n", " '0011000000',\n", " '0011000001',\n", " '0011000010',\n", " '0011000011',\n", " '0011000100',\n", " '0011000101',\n", " '0011000110',\n", " '0011000111',\n", " '0011001000',\n", " '0011001001',\n", " '0011001010',\n", " '0011001011',\n", " '0011001100',\n", " '0011001101',\n", " '0011001110',\n", " '0011001111',\n", " '0011010000',\n", " '0011010001',\n", " '0011010010',\n", " '0011010011',\n", " '0011010100',\n", " '0011010101',\n", " '0011010110',\n", " '0011010111',\n", " '0011011000',\n", " '0011011001',\n", " '0011011010',\n", " '0011011011',\n", " '0011011100',\n", " '0011011101',\n", " '0011011110',\n", " '0011011111',\n", " '0011100000',\n", " '0011100001',\n", " '0011100010',\n", " '0011100011',\n", " '0011100100',\n", " '0011100101',\n", " '0011100110',\n", " '0011100111',\n", " '0011101000',\n", " '0011101001',\n", " '0011101010',\n", " '0011101011',\n", " '0011101100',\n", " '0011101101',\n", " '0011101110',\n", " '0011101111',\n", " '0011110000',\n", " '0011110001',\n", " '0011110010',\n", " '0011110011',\n", " '0011110100',\n", " '0011110101',\n", " '0011110110',\n", " '0011110111',\n", " '0011111000',\n", " '0011111001',\n", " '0011111010',\n", " '0011111011',\n", " '0011111100',\n", " '0011111101',\n", " '0011111110',\n", " '0011111111',\n", " '0100000000',\n", " '0100000001',\n", " '0100000010',\n", " '0100000011',\n", " '0100000100',\n", " '0100000101',\n", " '0100000110',\n", " '0100000111',\n", " '0100001000',\n", " '0100001001',\n", " '0100001010',\n", " '0100001011',\n", " '0100001100',\n", " '0100001101',\n", " '0100001110',\n", " '0100001111',\n", " '0100010000',\n", " '0100010001',\n", " '0100010010',\n", " '0100010011',\n", " '0100010100',\n", " '0100010101',\n", " '0100010110',\n", " '0100010111',\n", " '0100011000',\n", " '0100011001',\n", " '0100011010',\n", " '0100011011',\n", " '0100011100',\n", " '0100011101',\n", " '0100011110',\n", " '0100011111',\n", " '0100100000',\n", " '0100100001',\n", " '0100100010',\n", " '0100100011',\n", " '0100100100',\n", " '0100100101',\n", " '0100100110',\n", " '0100100111',\n", " '0100101000',\n", " '0100101001',\n", " '0100101010',\n", " '0100101011',\n", " '0100101100',\n", " '0100101101',\n", " '0100101110',\n", " '0100101111',\n", " '0100110000',\n", " '0100110001',\n", " '0100110010',\n", " '0100110011',\n", " '0100110100',\n", " '0100110101',\n", " '0100110110',\n", " '0100110111',\n", " '0100111000',\n", " '0100111001',\n", " '0100111010',\n", " '0100111011',\n", " '0100111100',\n", " '0100111101',\n", " '0100111110',\n", " '0100111111',\n", " '0101000000',\n", " '0101000001',\n", " '0101000010',\n", " '0101000011',\n", " '0101000100',\n", " '0101000101',\n", " '0101000110',\n", " '0101000111',\n", " '0101001000',\n", " '0101001001',\n", " '0101001010',\n", " '0101001011',\n", " '0101001100',\n", " '0101001101',\n", " '0101001110',\n", " '0101001111',\n", " '0101010000',\n", " '0101010001',\n", " '0101010010',\n", " '0101010011',\n", " '0101010100',\n", " '0101010101',\n", " '0101010110',\n", " '0101010111',\n", " '0101011000',\n", " '0101011001',\n", " '0101011010',\n", " '0101011011',\n", " '0101011100',\n", " '0101011101',\n", " '0101011110',\n", " '0101011111',\n", " '0101100000',\n", " '0101100001',\n", " '0101100010',\n", " '0101100011',\n", " '0101100100',\n", " '0101100101',\n", " '0101100110',\n", " '0101100111',\n", " '0101101000',\n", " '0101101001',\n", " '0101101010',\n", " '0101101011',\n", " '0101101100',\n", " '0101101101',\n", " '0101101110',\n", " '0101101111',\n", " '0101110000',\n", " '0101110001',\n", " '0101110010',\n", " '0101110011',\n", " '0101110100',\n", " '0101110101',\n", " '0101110110',\n", " '0101110111',\n", " '0101111000',\n", " '0101111001',\n", " '0101111010',\n", " '0101111011',\n", " '0101111100',\n", " '0101111101',\n", " '0101111110',\n", " '0101111111',\n", " '0110000000',\n", " '0110000001',\n", " '0110000010',\n", " '0110000011',\n", " '0110000100',\n", " '0110000101',\n", " '0110000110',\n", " '0110000111',\n", " '0110001000',\n", " '0110001001',\n", " '0110001010',\n", " '0110001011',\n", " '0110001100',\n", " '0110001101',\n", " '0110001110',\n", " '0110001111',\n", " '0110010000',\n", " '0110010001',\n", " '0110010010',\n", " '0110010011',\n", " '0110010100',\n", " '0110010101',\n", " '0110010110',\n", " '0110010111',\n", " '0110011000',\n", " '0110011001',\n", " '0110011010',\n", " '0110011011',\n", " '0110011100',\n", " '0110011101',\n", " '0110011110',\n", " '0110011111',\n", " '0110100000',\n", " '0110100001',\n", " '0110100010',\n", " '0110100011',\n", " '0110100100',\n", " '0110100101',\n", " '0110100110',\n", " '0110100111',\n", " '0110101000',\n", " '0110101001',\n", " '0110101010',\n", " '0110101011',\n", " '0110101100',\n", " '0110101101',\n", " '0110101110',\n", " '0110101111',\n", " '0110110000',\n", " '0110110001',\n", " '0110110010',\n", " '0110110011',\n", " '0110110100',\n", " '0110110101',\n", " '0110110110',\n", " '0110110111',\n", " '0110111000',\n", " '0110111001',\n", " '0110111010',\n", " '0110111011',\n", " '0110111100',\n", " '0110111101',\n", " '0110111110',\n", " '0110111111',\n", " '0111000000',\n", " '0111000001',\n", " '0111000010',\n", " '0111000011',\n", " '0111000100',\n", " '0111000101',\n", " '0111000110',\n", " '0111000111',\n", " '0111001000',\n", " '0111001001',\n", " '0111001010',\n", " '0111001011',\n", " '0111001100',\n", " '0111001101',\n", " '0111001110',\n", " '0111001111',\n", " '0111010000',\n", " '0111010001',\n", " '0111010010',\n", " '0111010011',\n", " '0111010100',\n", " '0111010101',\n", " '0111010110',\n", " '0111010111',\n", " '0111011000',\n", " '0111011001',\n", " '0111011010',\n", " '0111011011',\n", " '0111011100',\n", " '0111011101',\n", " '0111011110',\n", " '0111011111',\n", " '0111100000',\n", " '0111100001',\n", " '0111100010',\n", " '0111100011',\n", " '0111100100',\n", " '0111100101',\n", " '0111100110',\n", " '0111100111',\n", " '0111101000',\n", " '0111101001',\n", " '0111101010',\n", " '0111101011',\n", " '0111101100',\n", " '0111101101',\n", " '0111101110',\n", " '0111101111',\n", " '0111110000',\n", " '0111110001',\n", " '0111110010',\n", " '0111110011',\n", " '0111110100',\n", " '0111110101',\n", " '0111110110',\n", " '0111110111',\n", " '0111111000',\n", " '0111111001',\n", " '0111111010',\n", " '0111111011',\n", " '0111111100',\n", " '0111111101',\n", " '0111111110',\n", " '0111111111',\n", " '1000000000',\n", " '1000000001',\n", " '1000000010',\n", " '1000000011',\n", " '1000000100',\n", " '1000000101',\n", " '1000000110',\n", " '1000000111',\n", " '1000001000',\n", " '1000001001',\n", " '1000001010',\n", " '1000001011',\n", " '1000001100',\n", " '1000001101',\n", " '1000001110',\n", " '1000001111',\n", " '1000010000',\n", " '1000010001',\n", " '1000010010',\n", " '1000010011',\n", " '1000010100',\n", " '1000010101',\n", " '1000010110',\n", " '1000010111',\n", " '1000011000',\n", " '1000011001',\n", " '1000011010',\n", " '1000011011',\n", " '1000011100',\n", " '1000011101',\n", " '1000011110',\n", " '1000011111',\n", " '1000100000',\n", " '1000100001',\n", " '1000100010',\n", " '1000100011',\n", " '1000100100',\n", " '1000100101',\n", " '1000100110',\n", " '1000100111',\n", " '1000101000',\n", " '1000101001',\n", " '1000101010',\n", " '1000101011',\n", " '1000101100',\n", " '1000101101',\n", " '1000101110',\n", " '1000101111',\n", " '1000110000',\n", " '1000110001',\n", " '1000110010',\n", " '1000110011',\n", " '1000110100',\n", " '1000110101',\n", " '1000110110',\n", " '1000110111',\n", " '1000111000',\n", " '1000111001',\n", " '1000111010',\n", " '1000111011',\n", " '1000111100',\n", " '1000111101',\n", " '1000111110',\n", " '1000111111',\n", " '1001000000',\n", " '1001000001',\n", " '1001000010',\n", " '1001000011',\n", " '1001000100',\n", " '1001000101',\n", " '1001000110',\n", " '1001000111',\n", " '1001001000',\n", " '1001001001',\n", " '1001001010',\n", " '1001001011',\n", " '1001001100',\n", " '1001001101',\n", " '1001001110',\n", " '1001001111',\n", " '1001010000',\n", " '1001010001',\n", " '1001010010',\n", " '1001010011',\n", " '1001010100',\n", " '1001010101',\n", " '1001010110',\n", " '1001010111',\n", " '1001011000',\n", " '1001011001',\n", " '1001011010',\n", " '1001011011',\n", " '1001011100',\n", " '1001011101',\n", " '1001011110',\n", " '1001011111',\n", " '1001100000',\n", " '1001100001',\n", " '1001100010',\n", " '1001100011',\n", " '1001100100',\n", " '1001100101',\n", " '1001100110',\n", " '1001100111',\n", " '1001101000',\n", " '1001101001',\n", " '1001101010',\n", " '1001101011',\n", " '1001101100',\n", " '1001101101',\n", " '1001101110',\n", " '1001101111',\n", " '1001110000',\n", " '1001110001',\n", " '1001110010',\n", " '1001110011',\n", " '1001110100',\n", " '1001110101',\n", " '1001110110',\n", " '1001110111',\n", " '1001111000',\n", " '1001111001',\n", " '1001111010',\n", " '1001111011',\n", " '1001111100',\n", " '1001111101',\n", " '1001111110',\n", " '1001111111',\n", " '1010000000',\n", " '1010000001',\n", " '1010000010',\n", " '1010000011',\n", " '1010000100',\n", " '1010000101',\n", " '1010000110',\n", " '1010000111',\n", " '1010001000',\n", " '1010001001',\n", " '1010001010',\n", " '1010001011',\n", " '1010001100',\n", " '1010001101',\n", " '1010001110',\n", " '1010001111',\n", " '1010010000',\n", " '1010010001',\n", " '1010010010',\n", " '1010010011',\n", " '1010010100',\n", " '1010010101',\n", " '1010010110',\n", " '1010010111',\n", " '1010011000',\n", " '1010011001',\n", " '1010011010',\n", " '1010011011',\n", " '1010011100',\n", " '1010011101',\n", " '1010011110',\n", " '1010011111',\n", " '1010100000',\n", " '1010100001',\n", " '1010100010',\n", " '1010100011',\n", " '1010100100',\n", " '1010100101',\n", " '1010100110',\n", " '1010100111',\n", " '1010101000',\n", " '1010101001',\n", " '1010101010',\n", " '1010101011',\n", " '1010101100',\n", " '1010101101',\n", " '1010101110',\n", " '1010101111',\n", " '1010110000',\n", " '1010110001',\n", " '1010110010',\n", " '1010110011',\n", " '1010110100',\n", " '1010110101',\n", " '1010110110',\n", " '1010110111',\n", " '1010111000',\n", " '1010111001',\n", " '1010111010',\n", " '1010111011',\n", " '1010111100',\n", " '1010111101',\n", " '1010111110',\n", " '1010111111',\n", " '1011000000',\n", " '1011000001',\n", " '1011000010',\n", " '1011000011',\n", " '1011000100',\n", " '1011000101',\n", " '1011000110',\n", " '1011000111',\n", " '1011001000',\n", " '1011001001',\n", " '1011001010',\n", " '1011001011',\n", " '1011001100',\n", " '1011001101',\n", " '1011001110',\n", " '1011001111',\n", " '1011010000',\n", " '1011010001',\n", " '1011010010',\n", " '1011010011',\n", " '1011010100',\n", " '1011010101',\n", " '1011010110',\n", " '1011010111',\n", " '1011011000',\n", " '1011011001',\n", " '1011011010',\n", " '1011011011',\n", " '1011011100',\n", " '1011011101',\n", " '1011011110',\n", " '1011011111',\n", " '1011100000',\n", " '1011100001',\n", " '1011100010',\n", " '1011100011',\n", " '1011100100',\n", " '1011100101',\n", " '1011100110',\n", " '1011100111',\n", " '1011101000',\n", " '1011101001',\n", " '1011101010',\n", " '1011101011',\n", " '1011101100',\n", " '1011101101',\n", " '1011101110',\n", " '1011101111',\n", " '1011110000',\n", " '1011110001',\n", " '1011110010',\n", " '1011110011',\n", " '1011110100',\n", " '1011110101',\n", " '1011110110',\n", " '1011110111',\n", " '1011111000',\n", " '1011111001',\n", " '1011111010',\n", " '1011111011',\n", " '1011111100',\n", " '1011111101',\n", " '1011111110',\n", " '1011111111',\n", " '1100000000',\n", " '1100000001',\n", " '1100000010',\n", " '1100000011',\n", " '1100000100',\n", " '1100000101',\n", " '1100000110',\n", " '1100000111',\n", " '1100001000',\n", " '1100001001',\n", " '1100001010',\n", " '1100001011',\n", " '1100001100',\n", " '1100001101',\n", " '1100001110',\n", " '1100001111',\n", " '1100010000',\n", " '1100010001',\n", " '1100010010',\n", " '1100010011',\n", " '1100010100',\n", " '1100010101',\n", " '1100010110',\n", " '1100010111',\n", " '1100011000',\n", " '1100011001',\n", " '1100011010',\n", " '1100011011',\n", " '1100011100',\n", " '1100011101',\n", " '1100011110',\n", " '1100011111',\n", " '1100100000',\n", " '1100100001',\n", " '1100100010',\n", " '1100100011',\n", " '1100100100',\n", " '1100100101',\n", " '1100100110',\n", " '1100100111',\n", " '1100101000',\n", " '1100101001',\n", " '1100101010',\n", " '1100101011',\n", " '1100101100',\n", " '1100101101',\n", " '1100101110',\n", " '1100101111',\n", " '1100110000',\n", " '1100110001',\n", " '1100110010',\n", " '1100110011',\n", " '1100110100',\n", " '1100110101',\n", " '1100110110',\n", " '1100110111',\n", " '1100111000',\n", " '1100111001',\n", " '1100111010',\n", " '1100111011',\n", " '1100111100',\n", " '1100111101',\n", " '1100111110',\n", " '1100111111',\n", " '1101000000',\n", " '1101000001',\n", " '1101000010',\n", " '1101000011',\n", " '1101000100',\n", " '1101000101',\n", " '1101000110',\n", " '1101000111',\n", " '1101001000',\n", " '1101001001',\n", " '1101001010',\n", " '1101001011',\n", " '1101001100',\n", " '1101001101',\n", " '1101001110',\n", " '1101001111',\n", " '1101010000',\n", " '1101010001',\n", " '1101010010',\n", " '1101010011',\n", " '1101010100',\n", " '1101010101',\n", " '1101010110',\n", " '1101010111',\n", " '1101011000',\n", " '1101011001',\n", " '1101011010',\n", " '1101011011',\n", " '1101011100',\n", " '1101011101',\n", " '1101011110',\n", " '1101011111',\n", " '1101100000',\n", " '1101100001',\n", " '1101100010',\n", " '1101100011',\n", " '1101100100',\n", " '1101100101',\n", " '1101100110',\n", " '1101100111',\n", " '1101101000',\n", " '1101101001',\n", " '1101101010',\n", " '1101101011',\n", " '1101101100',\n", " '1101101101',\n", " '1101101110',\n", " '1101101111',\n", " '1101110000',\n", " '1101110001',\n", " '1101110010',\n", " '1101110011',\n", " '1101110100',\n", " '1101110101',\n", " '1101110110',\n", " '1101110111',\n", " '1101111000',\n", " '1101111001',\n", " '1101111010',\n", " '1101111011',\n", " '1101111100',\n", " '1101111101',\n", " '1101111110',\n", " '1101111111',\n", " '1110000000',\n", " '1110000001',\n", " '1110000010',\n", " '1110000011',\n", " '1110000100',\n", " '1110000101',\n", " '1110000110',\n", " '1110000111',\n", " '1110001000',\n", " '1110001001',\n", " '1110001010',\n", " '1110001011',\n", " '1110001100',\n", " '1110001101',\n", " '1110001110',\n", " '1110001111',\n", " '1110010000',\n", " '1110010001',\n", " '1110010010',\n", " '1110010011',\n", " '1110010100',\n", " '1110010101',\n", " '1110010110',\n", " '1110010111',\n", " '1110011000',\n", " '1110011001',\n", " '1110011010',\n", " '1110011011',\n", " '1110011100',\n", " '1110011101',\n", " '1110011110',\n", " '1110011111',\n", " '1110100000',\n", " '1110100001',\n", " '1110100010',\n", " '1110100011',\n", " '1110100100',\n", " '1110100101',\n", " '1110100110',\n", " '1110100111',\n", " '1110101000',\n", " '1110101001',\n", " '1110101010',\n", " '1110101011',\n", " '1110101100',\n", " '1110101101',\n", " '1110101110',\n", " '1110101111',\n", " '1110110000',\n", " '1110110001',\n", " '1110110010',\n", " '1110110011',\n", " '1110110100',\n", " '1110110101',\n", " '1110110110',\n", " '1110110111',\n", " '1110111000',\n", " '1110111001',\n", " '1110111010',\n", " '1110111011',\n", " '1110111100',\n", " '1110111101',\n", " '1110111110',\n", " '1110111111',\n", " '1111000000',\n", " '1111000001',\n", " '1111000010',\n", " '1111000011',\n", " '1111000100',\n", " '1111000101',\n", " '1111000110',\n", " '1111000111',\n", " '1111001000',\n", " '1111001001',\n", " '1111001010',\n", " '1111001011',\n", " '1111001100',\n", " '1111001101',\n", " '1111001110',\n", " '1111001111',\n", " '1111010000',\n", " '1111010001',\n", " '1111010010',\n", " '1111010011',\n", " '1111010100',\n", " '1111010101',\n", " '1111010110',\n", " '1111010111',\n", " '1111011000',\n", " '1111011001',\n", " '1111011010',\n", " '1111011011',\n", " '1111011100',\n", " '1111011101',\n", " '1111011110',\n", " '1111011111',\n", " '1111100000',\n", " '1111100001',\n", " '1111100010',\n", " '1111100011',\n", " '1111100100',\n", " '1111100101',\n", " '1111100110',\n", " '1111100111',\n", " ...]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import itertools\n", "[\"\".join(seq) for seq in itertools.product(\"01\", repeat=10)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## End" ] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 4 }