Breaking hill ciphers done, challenge 6 done.
[cipher-tools.git] / hill-ciphers.ipynb
index 909828a7128a24b58686adbd0085daeaa71d8ab7..2019dd5b600618d8d93d69e6ad5cf79b60aa45bf 100644 (file)
@@ -1,7 +1,7 @@
 {
  "metadata": {
   "name": "",
-  "signature": "sha256:0fe9165e4a65606dd93377df5e8d4ccf8671a4edf4adc8d5da4b33f83316516f"
+  "signature": "sha256:112d1c84c318592f927e18c5b0f15ed60ac8418ca15cb79596ba6212ff2d7e3f"
  },
  "nbformat": 3,
  "nbformat_minor": 0,
      ],
      "prompt_number": 184
     },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "len([list(m) for m in itertools.product([list(r) for r in itertools.product(range(26), repeat=3)], repeat=3)])"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "ename": "KeyboardInterrupt",
+       "evalue": "",
+       "output_type": "pyerr",
+       "traceback": [
+        "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
+        "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
+       ]
+      }
+     ],
+     "prompt_number": 203
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "(3**3)**3"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 202,
+       "text": [
+        "19683"
+       ]
+      }
+     ],
+     "prompt_number": 202
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "[np.matrix(list(m)) for m in itertools.product([list(r) for r in itertools.product(range(3), repeat=2)], repeat=2)]"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 206,
+       "text": [
+        "[matrix([[0, 0],\n",
+        "         [0, 0]]), matrix([[0, 0],\n",
+        "         [0, 1]]), matrix([[0, 0],\n",
+        "         [0, 2]]), matrix([[0, 0],\n",
+        "         [1, 0]]), matrix([[0, 0],\n",
+        "         [1, 1]]), matrix([[0, 0],\n",
+        "         [1, 2]]), matrix([[0, 0],\n",
+        "         [2, 0]]), matrix([[0, 0],\n",
+        "         [2, 1]]), matrix([[0, 0],\n",
+        "         [2, 2]]), matrix([[0, 1],\n",
+        "         [0, 0]]), matrix([[0, 1],\n",
+        "         [0, 1]]), matrix([[0, 1],\n",
+        "         [0, 2]]), matrix([[0, 1],\n",
+        "         [1, 0]]), matrix([[0, 1],\n",
+        "         [1, 1]]), matrix([[0, 1],\n",
+        "         [1, 2]]), matrix([[0, 1],\n",
+        "         [2, 0]]), matrix([[0, 1],\n",
+        "         [2, 1]]), matrix([[0, 1],\n",
+        "         [2, 2]]), matrix([[0, 2],\n",
+        "         [0, 0]]), matrix([[0, 2],\n",
+        "         [0, 1]]), matrix([[0, 2],\n",
+        "         [0, 2]]), matrix([[0, 2],\n",
+        "         [1, 0]]), matrix([[0, 2],\n",
+        "         [1, 1]]), matrix([[0, 2],\n",
+        "         [1, 2]]), matrix([[0, 2],\n",
+        "         [2, 0]]), matrix([[0, 2],\n",
+        "         [2, 1]]), matrix([[0, 2],\n",
+        "         [2, 2]]), matrix([[1, 0],\n",
+        "         [0, 0]]), matrix([[1, 0],\n",
+        "         [0, 1]]), matrix([[1, 0],\n",
+        "         [0, 2]]), matrix([[1, 0],\n",
+        "         [1, 0]]), matrix([[1, 0],\n",
+        "         [1, 1]]), matrix([[1, 0],\n",
+        "         [1, 2]]), matrix([[1, 0],\n",
+        "         [2, 0]]), matrix([[1, 0],\n",
+        "         [2, 1]]), matrix([[1, 0],\n",
+        "         [2, 2]]), matrix([[1, 1],\n",
+        "         [0, 0]]), matrix([[1, 1],\n",
+        "         [0, 1]]), matrix([[1, 1],\n",
+        "         [0, 2]]), matrix([[1, 1],\n",
+        "         [1, 0]]), matrix([[1, 1],\n",
+        "         [1, 1]]), matrix([[1, 1],\n",
+        "         [1, 2]]), matrix([[1, 1],\n",
+        "         [2, 0]]), matrix([[1, 1],\n",
+        "         [2, 1]]), matrix([[1, 1],\n",
+        "         [2, 2]]), matrix([[1, 2],\n",
+        "         [0, 0]]), matrix([[1, 2],\n",
+        "         [0, 1]]), matrix([[1, 2],\n",
+        "         [0, 2]]), matrix([[1, 2],\n",
+        "         [1, 0]]), matrix([[1, 2],\n",
+        "         [1, 1]]), matrix([[1, 2],\n",
+        "         [1, 2]]), matrix([[1, 2],\n",
+        "         [2, 0]]), matrix([[1, 2],\n",
+        "         [2, 1]]), matrix([[1, 2],\n",
+        "         [2, 2]]), matrix([[2, 0],\n",
+        "         [0, 0]]), matrix([[2, 0],\n",
+        "         [0, 1]]), matrix([[2, 0],\n",
+        "         [0, 2]]), matrix([[2, 0],\n",
+        "         [1, 0]]), matrix([[2, 0],\n",
+        "         [1, 1]]), matrix([[2, 0],\n",
+        "         [1, 2]]), matrix([[2, 0],\n",
+        "         [2, 0]]), matrix([[2, 0],\n",
+        "         [2, 1]]), matrix([[2, 0],\n",
+        "         [2, 2]]), matrix([[2, 1],\n",
+        "         [0, 0]]), matrix([[2, 1],\n",
+        "         [0, 1]]), matrix([[2, 1],\n",
+        "         [0, 2]]), matrix([[2, 1],\n",
+        "         [1, 0]]), matrix([[2, 1],\n",
+        "         [1, 1]]), matrix([[2, 1],\n",
+        "         [1, 2]]), matrix([[2, 1],\n",
+        "         [2, 0]]), matrix([[2, 1],\n",
+        "         [2, 1]]), matrix([[2, 1],\n",
+        "         [2, 2]]), matrix([[2, 2],\n",
+        "         [0, 0]]), matrix([[2, 2],\n",
+        "         [0, 1]]), matrix([[2, 2],\n",
+        "         [0, 2]]), matrix([[2, 2],\n",
+        "         [1, 0]]), matrix([[2, 2],\n",
+        "         [1, 1]]), matrix([[2, 2],\n",
+        "         [1, 2]]), matrix([[2, 2],\n",
+        "         [2, 0]]), matrix([[2, 2],\n",
+        "         [2, 1]]), matrix([[2, 2],\n",
+        "         [2, 2]])]"
+       ]
+      }
+     ],
+     "prompt_number": 206
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "all_matrices = [np.matrix(list(m)) for m in itertools.product([list(r) for r in itertools.product(range(26), repeat=2)], repeat=2)]\n",
+      "valid_matrices = [m for m, d in zip(all_matrices, (int(round(linalg.det(m))) for m in all_matrices))\n",
+      "                  if d != 0\n",
+      "                  if d % 2 != 0\n",
+      "                  if d % 13 != 0 ]\n",
+      "len(valid_matrices)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 215,
+       "text": [
+        "157248"
+       ]
+      }
+     ],
+     "prompt_number": 215
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "%%timeit\n",
+      "[m for m, d in zip(all_matrices, (int(round(linalg.det(m))) for m in all_matrices))\n",
+      "                  if d != 0\n",
+      "                  if d % 2 != 0\n",
+      "                  if d % 13 != 0 ]\n",
+      "print('done')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "done\n",
+        "done"
+       ]
+      },
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "\n",
+        "done"
+       ]
+      },
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "\n",
+        "done"
+       ]
+      },
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "\n",
+        "1 loops, best of 3: 10 s per loop\n"
+       ]
+      }
+     ],
+     "prompt_number": 216
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "%%timeit\n",
+      "[m for m in all_matrices\n",
+      "                  if int(round(linalg.det(m))) != 0\n",
+      "                  if int(round(linalg.det(m))) % 2 != 0\n",
+      "                  if int(round(linalg.det(m))) % 13 != 0 ]\n",
+      "print('done')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "done\n",
+        "done"
+       ]
+      },
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "\n",
+        "done"
+       ]
+      },
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "\n",
+        "done"
+       ]
+      },
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "\n",
+        "1 loops, best of 3: 20.4 s per loop\n"
+       ]
+      }
+     ],
+     "prompt_number": 217
+    },
     {
      "cell_type": "code",
      "collapsed": false,