X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=hill-ciphers.ipynb;h=2019dd5b600618d8d93d69e6ad5cf79b60aa45bf;hb=e138c645bb02427a76798b1ea7f4c5ad579f204f;hp=909828a7128a24b58686adbd0085daeaa71d8ab7;hpb=1ca546941ac408759d3b10bc12d00a5d6b1b130a;p=cipher-tools.git diff --git a/hill-ciphers.ipynb b/hill-ciphers.ipynb index 909828a..2019dd5 100644 --- a/hill-ciphers.ipynb +++ b/hill-ciphers.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:0fe9165e4a65606dd93377df5e8d4ccf8671a4edf4adc8d5da4b33f83316516f" + "signature": "sha256:112d1c84c318592f927e18c5b0f15ed60ac8418ca15cb79596ba6212ff2d7e3f" }, "nbformat": 3, "nbformat_minor": 0, @@ -1377,6 +1377,271 @@ ], "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,