From: Neil Smith <neil.git@njae.me.uk>
Date: Mon, 8 Dec 2014 17:08:53 +0000 (+0000)
Subject: Added AMSCO ciphers, done challenge 7
X-Git-Url: https://git.njae.me.uk/?a=commitdiff_plain;h=3d566520758c22f328c497783695f9919b54804a;p=cipher-training.git

Added AMSCO ciphers, done challenge 7
---

diff --git a/2013-challenge7.ipynb b/2013-challenge7.ipynb
index d7d18f4..df220ab 100644
--- a/2013-challenge7.ipynb
+++ b/2013-challenge7.ipynb
@@ -1,6 +1,7 @@
 {
  "metadata": {
-  "name": ""
+  "name": "",
+  "signature": "sha256:f1a5a36cab6e0c7ddd88d11606576a341e061c4e87c77676dfffeff0c585a596"
  },
  "nbformat": 3,
  "nbformat_minor": 0,
@@ -11,7 +12,23 @@
      "cell_type": "code",
      "collapsed": false,
      "input": [
-      "from cipherbreak import *\n",
+      "import matplotlib.pyplot as plt\n",
+      "import pandas as pd\n",
+      "import collections\n",
+      "import string\n",
+      "%matplotlib inline\n",
+      "\n",
+      "from cipherbreak import *"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [],
+     "prompt_number": 1
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
       "with open('2013/mona-lisa-words.txt') as f:\n",
       "    mlwords = [line.rstrip() for line in f]\n",
       "mltrans = collections.defaultdict(list)\n",
@@ -23,7 +40,7 @@
      "language": "python",
      "metadata": {},
      "outputs": [],
-     "prompt_number": 1
+     "prompt_number": 2
     },
     {
      "cell_type": "code",
@@ -54,137 +71,65 @@
      "language": "python",
      "metadata": {},
      "outputs": [],
-     "prompt_number": 2
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "plot_frequency_histogram(frequencies(sanitise(c7a)))"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stderr",
-       "text": [
-        "/usr/local/lib/python3.3/dist-packages/matplotlib/figure.py:372: UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure\n",
-        "  \"matplotlib is currently using a non-GUI backend, \"\n"
-       ]
-      },
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "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\n3n777S6nGT16dMDPxe9//3vl5OQoJydHy5Yt67aXQLe1b24/3b12tbW1GjVqlEpLS5WTk6O6ujqf\ntUePHtXll1+uvLw85eTkaNWqVT5rFy5cqE8++UT5+flasGCBz7qTPXxz9LtkyRItWrSoy9pf/epX\npwSfrz0MDz/8sP7whz9Ikm6//XYVFRVJkjZt2qTrr7/+tPq3335bubm5am9v19GjR5Wdna2ampou\ne7j//vtPeb3uuecePfbYYz7X709/+pPy8/OVn5+vESNG6JJLLvFZ2yeF8zTzWNfc3GxZlmW1tbVZ\n2dnZ1ueff95l3d69ey2bzWa98cYblmVZVllZmbVkyZIua99//30rMzPTO6+Ty+jKtm3brJycHOvY\nsWPW4cOHrZEjR1pLly7tsrampsaaPn26dfz4ccuyLOu2226zVqxY4Xf90tPTfa7TSdXV1VZeXp7V\n3t5utba2WhkZGT572Lt3rxUXF2ft3LnTsizLKikpsV544QW/8x80aJDfx0OZZu/evVZ2drb10Ucf\nWfn5+dZ7773Xo3meXK/333/f6uzstMaNG2eVlZVZlmVZa9assWbMmOFzmkCei5Ovc1tbm3XkyBFr\nzJgx1o4dO3z2Eui2Fsz2c3Le/fr1s9566y2fNSetXr3auvnmm72/Hzp0yGdtbW2tlZ2d3e08T/bw\nzdolS5ZY5eXlXdbu2LHDmjJlivd3h8Nh1dXVnVa3detWa9asWZZlWdb3v/99a8KECdZXX31llZeX\nW0899VSX87733nutO++80/rpT3962kdrvqm2ttYqKCiwLMuyOjo6rPPPP9/ve/qkr776yiosLLTW\nrVvXbW1fwggqjJYtW6a8vDxNnDhRdXV1+ve//+2zdtiwYZo4caIk6frrr9eWLVu6rNu0aZNKSko0\ndOhQSVJiYqLPeb722muaOXOmBgwYoMGDB+uKK67wudtl48aNeuedd3TBBRcoPz9fmzZt0t69ewNd\nVZ9ef/11zZgxQ/3799egQYM0ffp0v7t+RowYobFjx0qSxo0bp9ra2h73EIpPP/1UM2bM0IsvvhiW\n44MjRozQmDFjZLPZNGbMGE2dOlWSlJ2d7XMdA30utmzZopkzZ+qcc87RwIEDNXPmTL322ms+ewl0\nWwtm+zlp+PDhGj9+vN8aSRo7dqw2bNighQsXasuWLUpISPBZ290yQ5WXl6dPP/1UDQ0N2rlzpxIT\nE5Wamnpa3ckRdGtrqwYMGKCJEydq27Zt2rJliwoLC7uc93333af169dr27Ztmj9/vs8ehg8frqSk\nJL377rtav369CgoK/L6nT/r5z3+uoqIiXX755YGvcB8Q1tPMY5nH49HGjRu1detWDRgwQBdffLHa\n29t91n/zGIZlWT6PadhstoDfsP9b2910paWlWrx4cUDzDlSwPZx99tnen8866yy/u58iaciQIRo+\nfLhee+01ZWVl9Xh+31yvfv36qX///t6fjx8/3u00/p6Lrp5jf8fEQt3WAtnuBg4c2G2NJGVkZGjH\njh165ZVXdO+996qoqEi//vWvA5rWn7i4uFN2TXe3/cyaNUurV69WY2Ojrr322i5r4uPjNWLECD3/\n/POaNGmSxo4dq02bNunjjz/2uW189tlnOnr0qDo6OnTs2DGde+65Pnu46aab9Nxzz6mpqUllZWXd\nruPzzz+v/fv3x+RxOUZQYXL48GElJiZqwIAB+uijj7R161a/9fv27fPWvPjiiz7/Z3bJJZfo73//\nu5qbmyXJ+29XLrroIlVWVuqLL75Qa2ur1q1b5/OPUVFRkVavXq3//ve/3vnu27ev2/XszuTJk/Xy\nyy+rvb1dR44c0SuvvBIVJxT0799f//jHP7RixQqtXLmyt9vxq7CwUJWVlTp27JiOHj2qyspKn9uP\nFPi2Fsz2E6yGhgYNGDBA1113ne68805t377dZ+3gwYPV2toa0Hztdrs+/fRTNTc3q729XevWrfNb\nf80112jlypVavXq1Zs2a5bOusLBQS5Ys0ZQpU1RYWKgnn3xSBQUFPut/8pOf6IEHHtCcOXO6PW52\n5ZVXqqqqStu2bdO0adP81r7zzjtaunRpr56Y1JsYQYXJpZdeqieffFIOh0OjRo3y7lLpis1m06hR\no/T444+rrKxMY8aM0W233dZlrcPh0D333KMpU6borLPOUkFBgZ599tkua/Pz83XNNdcoNzdXycnJ\nfne9jB49Wg888ICKi4vV2dmp+Ph4LV++XN/97nf99t2dCy64QFdccYXGjh0ru92unJwcfetb3wp4\nnt0tI5Q/mIFMY7PZdO6552rdunVyuVwaPHiwfvjDH4Y8T3/r5W8EE8gy8vPzdeONN3pf35tvvlm5\nubk+ewl0W/vf7efCCy/sdhQV6Ouxa9cu3XXXXd7RpL/TyJOSkjR58mTl5OTosssu8/u9cvHx8brv\nvvs0fvx4paamyuFw+O3J4XDoyJEjSktLk91u91lXWFioxYsXa+LEiTrnnHN0zjnn+Az2FStW6Oyz\nz9a1116rzs5OTZo0SR6PR06n02fPl1xyiRITE7t9/h5//HEdPHhQF198sSTpwgsv1FNPPeV3mr6E\nD+oi7I4ePaqBAweqra1NU6ZM0dNPP628vLxe6eXzzz/v1WNbva22tlbTp0/Xrl27gp520aJFGjRo\nkO64444IdBa7Ojs7NW7cOK1evVrnn39+b7djNHbxIexuueUW5efna9y4cbr66qt7LZwOHDigSZMm\n6a677uqV5ZuiJ7vpomH3bDSpqalRRkaGpk6dSjgFgBEUAMBIjKAAAEYioAAARiKgAABGIqAAAEYi\noAAARiKgAABG+j/og6x5jaDpPwAAAABJRU5ErkJggg==\n",
-       "text": [
-        "<matplotlib.figure.Figure at 0xb55607cc>"
-       ]
-      }
-     ],
      "prompt_number": 3
     },
     {
      "cell_type": "code",
      "collapsed": false,
      "input": [
-      "c7af = frequencies(sanitise(c7a))\n",
-      "plot_frequency_histogram(c7af, sort_key=lambda l: c7af[l])"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEkCAYAAAB6wKVjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHKlJREFUeJzt3X90U/X9x/FXsEUU2tF2a3pskTJpKaGlP1A4wCrRkuJ0\neBClCuoqnTplO9txKjB1WvZVmilMcROdOnXMI5NxdgqipwcGJxxRsSKIaHVMoYOWtk5LoVCs0t7v\nH4xipUnaNKGfJs/HOTk0yTuf+w65zaufe29ubJZlWQIAwDAD+roBAAC6QkABAIxEQAEAjERAAQCM\nREABAIxEQAEAjOQzoEpKSmS325WVlXXafUuXLtWAAQPU2NjYcVtZWZnS0tKUkZGh9evXB79bAEDE\n8BlQc+fOVUVFxWm379+/Xxs2bNDw4cM7bquqqtLLL7+sqqoqVVRUaN68eWpvbw9+xwCAiOAzoPLz\n8xUXF3fa7b/61a/08MMPd7ptzZo1mj17tqKjo5WamqqRI0eqsrIyuN0CACJGj/dBrVmzRikpKRo7\ndmyn2w8cOKCUlJSO6ykpKaqtre19hwCAiBTVk+KWlhYtXrxYGzZs6LjN15mSbDZb4J0BACJajwLq\n008/VXV1tbKzsyVJNTU1GjdunN5++20lJydr//79HbU1NTVKTk4+bYycnBzt3Lmzl20DAMJBdna2\n3nvvva7vtPzYu3evlZmZ2eV9qamp1hdffGFZlmV9+OGHVnZ2ttXa2mrt2bPH+v73v2+1t7ef9phu\nLLJfe+CBB8K21pQ+qDWrD2p7XhvqsfsTX5ngcx/U7NmzNWnSJO3evVvDhg3T888/3+n+b27Cczgc\nKioqksPh0A9/+EMtX76cTXwAgID53MS3cuVKnw/es2dPp+v33HOP7rnnnt53BQCIeGeVlpaWnskF\nLlq0SGd4kWdcampq2Naa0ge1ZvVBbc9rQz12f+ErE2z/2wZ4xthsNp9H/gEAIoevTOBcfAAAIxFQ\nAAAjEVAAACMRUABgkNjYeNlsNp+X2Nj4vm7zjOAgCQAwyInPj/p7jwyf91EOkgAA9DsEFADASAQU\nAMBIBBQAwEgEFADASAQUAMBIBBQAwEgEFADASAQUAMBIBBQAwEgEFADASAQUAMBIBBQAwEgEFADA\nSAQUAMBIBBQAwEgEFADASAQUAMBIBBQAwEgEFADASAQUAMBIPgOqpKREdrtdWVlZHbfdfffdGj16\ntLKzszVz5kwdOnSo476ysjKlpaUpIyND69evD13XAICw5zOg5s6dq4qKik63FRYW6sMPP9TOnTuV\nnp6usrIySVJVVZVefvllVVVVqaKiQvPmzVN7e3voOgeAfiI2Nl42m83nJTY2vq/bNI7PgMrPz1dc\nXFyn21wulwYMOPGwCRMmqKamRpK0Zs0azZ49W9HR0UpNTdXIkSNVWVkZorYBoP9obj4oyfJ5OVGD\nb+rVPqjnnntOl19+uSTpwIEDSklJ6bgvJSVFtbW1vesOABCxAg6ohx56SAMHDtScOXO81thstkCH\nBwBEuKhAHvTCCy/otdde08aNGztuS05O1v79+zuu19TUKDk5ucvHl5aWdvzsdDrldDoDaQMA0M94\nPB55PJ5u1dosy7J8FVRXV2v69OnatWuXJKmiokJ33nmnNm/erO9+97sddVVVVZozZ44qKytVW1ur\nqVOn6pNPPjltFmWz2eRnkQAQVk68D/p73zvx3tiT2nDgKxN8zqBmz56tzZs36/PPP9ewYcO0aNEi\nlZWV6auvvpLL5ZIkTZw4UcuXL5fD4VBRUZEcDoeioqK0fPlyNvEBAALmdwYV9AUygwIQBmJj4/0e\neRcTE6fDhxuZQfngKxMIKAAIQKhCh4A6hVMdAcD/8IFaszCDAoD/MWFWxAzqFGZQAAAjEVAAACMR\nUAAAIxFQAAAjEVAAACMRUAAAIxFQAAAjEVAAACMRUAAAIxFQAAAjEVAAACMRUAAAIxFQAAAjEVAA\nACMRUAAAIxFQAAAjEVAAACMRUAAAIxFQAAAjEVAAACMRUAAAIxFQAAAjEVAAACMRUAAAIxFQAAAj\n+QyokpIS2e12ZWVlddzW2Ngol8ul9PR0FRYWqqmpqeO+srIypaWlKSMjQ+vXrw9d1wCAsOczoObO\nnauKiopOt7ndbrlcLu3evVsFBQVyu92SpKqqKr388suqqqpSRUWF5s2bp/b29tB1DgAIaz4DKj8/\nX3FxcZ1uW7t2rYqLiyVJxcXFKi8vlyStWbNGs2fPVnR0tFJTUzVy5EhVVlaGqG0AQLjr8T6ohoYG\n2e12SZLdbldDQ4Mk6cCBA0pJSemoS0lJUW1tbZDaBIDAxMbGy2az+bzExsb3dZvoQlRvHnzyxfV1\nPwD0pebmg5IsPzW8V5moxwFlt9tVX1+vpKQk1dXVKTExUZKUnJys/fv3d9TV1NQoOTm5yzFKS0s7\nfnY6nXI6nT1tA0AEi42N/1/weBcTE6fDhxvPUEfoLo/HI4/H061am2VZPv+0qK6u1vTp07Vr1y5J\n0vz585WQkKAFCxbI7XarqalJbrdbVVVVmjNnjiorK1VbW6upU6fqk08+OW0WZbPZ5GeRAODTifcV\nf+8jJ95rwrk2HPjKBJ8zqNmzZ2vz5s36/PPPNWzYMP32t7/VwoULVVRUpD//+c9KTU3VqlWrJEkO\nh0NFRUVyOByKiorS8uXL2cQHAAiY3xlU0BfIDApAL5kwezGhNhz4ygTOJAEAMBIBBQAwEgEFADAS\nAQUAMBIBBQAwEgEFADASAQUAMBIBBQAwEgEFADASAQUAMBIBBQAwEgEFADASAQUAMBIBBQAwEgEF\nADASAQUAMBIBBQAwEgEFADASAQUAMBIBBQAwEgEFADASAQUAMBIBBQAwEgEFwAixsfGy2WxeL7Gx\n8X3dIs6wqL5uAAAkqbn5oCTLx/22M9cMjMAMCgBgJAIKAGAkAgoAYKSAA6qsrExjxoxRVlaW5syZ\no9bWVjU2Nsrlcik9PV2FhYVqamoKZq8AgAgSUEBVV1frmWee0fbt27Vr1y61tbXpb3/7m9xut1wu\nl3bv3q2CggK53e5g9wsAiBABBVRsbKyio6PV0tKi48ePq6WlReedd57Wrl2r4uJiSVJxcbHKy8uD\n2iwAIHIEFFDx8fG68847df755+u8887T0KFD5XK51NDQILvdLkmy2+1qaGgIarMA+hc+24TeCCig\nPv30Uz322GOqrq7WgQMHdOTIEb344oudak6ugAAi16nPNnV9OXE/0LWAPqi7bds2TZo0SQkJCZKk\nmTNn6q233lJSUpLq6+uVlJSkuro6JSYmdvn40tLSjp+dTqecTmcgbQAA+hmPxyOPx9OtWptlWd4/\nuu3Fzp07df311+udd97RoEGDdNNNN2n8+PH6z3/+o4SEBC1YsEBut1tNTU2nHShhs9kUwCIB9EMn\ntqL4+n0/9X4Q3NpT9eFcGw58ZUJAASVJDz/8sP7yl79owIABysvL07PPPqvm5mYVFRVp3759Sk1N\n1apVqzR06NBuNwMgvBBQBJQ/IQmoUDQDILwQUASUP74ygTNJAACMREABAIxEQAEAjERAAQCMREAB\nAIxEQAEAjERAAQCMREABAIxEQAEAjERAARHO31difPNrMXpSC/QWpzoCIlwoT8PDqY441ZE/nOoI\nANDvEFAAACMRUAAAIxFQAAAjEVAAACMRUAAAIxFQAAAjEVAAACMRUAAAIxFQQBjilEQIB1F93QCA\n4GtuPih/p8tpbradmWaAADGDAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGCnggGpqatI111yj\n0aNHy+Fw6O2331ZjY6NcLpfS09NVWFiopqamYPYKAIggAQfUL3/5S11++eX66KOP9P777ysjI0Nu\nt1sul0u7d+9WQUGB3G53MHsFAEQQmxXAF9sfOnRIubm52rNnT6fbMzIytHnzZtntdtXX18vpdOrj\njz/uvEAf3z8PIDhsNpv8fVBXOvG7GKra7vURqtrAeu5vteHAVyYENIPau3evvve972nu3LnKy8vT\nLbfcoqNHj6qhoUF2u12SZLfb1dDQEHjXADrh9EWINAEF1PHjx7V9+3bNmzdP27dv1+DBg0/bnHfy\nFwZAcJw6fZH3y4kaIDwEdC6+lJQUpaSk6KKLLpIkXXPNNSorK1NSUpLq6+uVlJSkuro6JSYmdvn4\n0tLSjp+dTqecTmcgbQD9XmxsvN9QiYmJ0+HDjWeoIyC0PB6PPB5Pt2oD2gclSRdffLGeffZZpaen\nq7S0VC0tLZKkhIQELViwQG63W01NTV3OrMJl2ynQWybsx2AfVP+tDQe+MiHggNq5c6duvvlmffXV\nV7rgggv0/PPPq62tTUVFRdq3b59SU1O1atUqDR06tNvNAJHGhDc5Aqr/1oaDkARUKJoBIo0Jb3IE\nVP+tDQdBP4oPAIBQI6AAAEYioAAARiKgAABGIqAAAEYioAAARiKgAABGIqAAAEYioAAARiKggCDj\nazGA4AjobOYAvDv1tRi+avgqGsAfZlAAACMRUEA3sNkOOPPYxAd0A5vtgDOPGRQAwEgEFADASAQU\nAMBIBBQAwEgEFCIWR+YBZuMoPkQsjswDzMYMCkbr6SzHXz0zIqD/YAYFo/V0luOvnhkR0H8wgwIA\nGImAAgAYiYACABiJgAIAGImAAgAYiYACABipVwHV1tam3NxcTZ8+XZLU2Ngol8ul9PR0FRYWqqmp\nKShNAgAiT68CatmyZXI4HLLZTny2xO12y+Vyaffu3SooKJDb7Q5KkwCAyBNwQNXU1Oi1117TzTff\nLMs68cHItWvXqri4WJJUXFys8vLy4HQJAIg4AQfUHXfcoUceeUQDBpwaoqGhQXa7XZJkt9vV0NDQ\n+w4BABEpoIBat26dEhMTlZub2zF7+raT5z4DACAQAZ2L780339TatWv12muv6csvv9Thw4d14403\nym63q76+XklJSaqrq1NiYmKXjy8tLe342el0yul0BtIGAKCf8Xg88ng83aq1Wd6mQN20efNmLVmy\nRK+88ormz5+vhIQELViwQG63W01NTacdKGGz2bzOuoBvOzEL97e+nFqn/Nf3pPZUPbU9r5WC/Xrw\n2n27Nhz4yoSgfA7q5Ka8hQsXasOGDUpPT9emTZu0cOHCYAyPMMMXBQLojl7PoHq8QGZQEa///MUe\nWB/UMoM6U7XhIOQzKAAAgo2AQlCw2Q5AsPGNugiKnn7zLQD4wwwKAGAkAgoAYCQCCgBgJAIKAGAk\nAgpecWQegL7EUXzwiiPzAPQlZlAAACMRUAAAIxFQEYb9SgD6C/ZBRRj2KwHoL5hBAQCMREABAIxE\nQAEAjERAAQCMREABAIxEQAEAjERAAQCMREABAIxEQAEAjERAAQCMREABAIxEQAEAjERAAQCMREAB\nAIxEQAEAjBRQQO3fv1+XXHKJxowZo8zMTD3++OOSpMbGRrlcLqWnp6uwsFBNTU1BbRYAEDkCCqjo\n6Gg9+uij+vDDD7V161Y98cQT+uijj+R2u+VyubR7924VFBTI7XYHu18AQIQIKKCSkpKUk5MjSRoy\nZIhGjx6t2tparV27VsXFxZKk4uJilZeXB69TAEBE6fU+qOrqau3YsUMTJkxQQ0OD7Ha7JMlut6uh\noaHXDQIAIlOvAurIkSO6+uqrtWzZMsXExHS6z2azyWaz9ao5AEDkigr0gV9//bWuvvpq3XjjjZox\nY4akE7Om+vp6JSUlqa6uTomJiV0+trS0tONnp9Mpp9MZaBsAgH7E4/HI4/F0q9ZmWZbV0wVYlqXi\n4mIlJCTo0Ucf7bh9/vz5SkhI0IIFC+R2u9XU1HTagRI2m00BLBJBcmJW6+///8Rr1N9qpe48v57U\nhr7ncK6Vgv168Np9uzYc+MqEgAJqy5YtuvjiizV27NiOzXhlZWUaP368ioqKtG/fPqWmpmrVqlUa\nOnRot5tBYGJj49XcfNBnTUxMnA4fbjTil6r/vCGGvudwrpUIKALKv6AHVKiawSmEjglviKHvOZxr\nJQKKgPLPVyYEvA8KoXUinHyvgM3NHIQCIHxxqiMAgJEIKACAkQgoAICRCCgAgJEIqDMoNja+4wwb\n3i6xsfF93SYAGIGj+M4gjswDgO5jBgUAMBIBBQAwEgHVS/72K7FPCQACwz6oXvK3X4l9SgAQGGZQ\nAAAjEVAAACMRUAAAIxFQAAAjEVAAACMRUAAAIxFQAAAjEVAAACMRUAAAIxFQAAAjEVAAACMRUAAA\nIxFQAAAjEVAAACMRUAAAIxFQAAAjEVAAACMFPaAqKiqUkZGhtLQ0/e53vwv28ACACBHUgGpra9PP\nf/5zVVRUqKqqSitXrtRHH30UzEX0A54wrg3l2NT2vDaUY1Mb2tpQjx0eghpQlZWVGjlypFJTUxUd\nHa3rrrtOa9asCeYi+gFPGNeGcmxqe14byrGpDW1tqMcOD0ENqNraWg0bNqzjekpKimpra4O5CABA\nhAhqQNlstmAOBwCIZFYQvfXWW9a0adM6ri9evNhyu92darKzsy1JXLhw4cKFi5Wdne01U2yWZVkK\nkuPHj2vUqFHauHGjzjvvPI0fP14rV67U6NGjg7UIAECEiArqYFFR+uMf/6hp06apra1NP/nJTwgn\nAEBAgjqDAgAgWDiTRD/w+OOPy+Fw6MYbb+yT5VdXVysrKyvky5k8eXKf94DQKy0t1dKlS4M6pq91\n55sOHTqkJ598MqjLDmTdHDJkSFB7CFcEVD/w5JNP6p///Kf++te/hmwZlmWpryfTb7zxRp8uH2dG\nKI727e66c/DgQS1fvjzoy+8pjnjuHgIqSF588UVNmDBBubm5uu2229Te3u6z/qGHHtKoUaOUn5+v\nOXPmeP2L8rbbbtOePXt02WWX6bHHHuuyprq6WhkZGZo7d65GjRql66+/XuvXr9fkyZOVnp6ud955\nx+vjRo0apeLiYmVlZammpsbv89yzZ4/y8vL07rvveh1z9OjRuvXWW5WZmalp06bpyy+/9Duu5P+v\nyuPHj+uGG26Qw+HQrFmzdOzYsS7rHnjgAS1btqzj+r333qvHH3/c59j/93//p4yMDL+vhyT9/ve/\nV1ZWlrKysjot59uOHj2qK664Qjk5OcrKytKqVau81v7pT39Sbm6ucnNzNWLECF166aU++12xYoWy\ns7OVk5OjH//4x17r3nnnHWVnZ6u1tVVHjx5VZmamqqqquqz99kxgyZIlWrRo0Wl1jzzyiP7whz9I\nku644w4VFBRIkjZt2qQbbrihy7G/ub7/61//8trvr3/9604B0t3ZVndnJAsXLtSnn36q3NxcLViw\nwGvdyd+p7qxv0omz6ASyzvtz1VVX6cILL1RmZqaeeeaZoIzZrwTzMPNIVVVVZU2fPt06fvy4ZVmW\ndfvtt1srVqzwWr9t2zYrKyvLOnbsmHX48GFr5MiR1tKlS73Wp6amWl988YXX+/fu3WtFRUVZH3zw\ngdXe3m6NGzfOKikpsSzLstasWWPNmDHD6+MGDBhgvf322z6f3969e63MzEzr448/tnJzc63333/f\nby87d+60LMuyioqKrBdffNHn+CcNGTLE57g2m8168803LcuyrJKSEmvJkiVd1lZXV1t5eXmWZVlW\nW1ubdcEFF1iNjY1ex66srLRycnKs1tZWq7m52UpLS/P6epx87VpaWqwjR45YY8aMsXbs2NFl7erV\nq61bbrml4/qhQ4e89nDS119/beXn51vr1q3zWvPBBx9Y6enpHeuEr+dmWZZ13333WXfddZf1s5/9\n7LSPfXzTydf5pCVLllilpaWn1W3dutWaNWuWZVmW9YMf/MCaMGGC9fXXX1ulpaXW008/fVp9T9b3\nHTt2WFOmTOm47nA4rJqaGp/Pz7J8rzvfVF1d3ek5etOT9S2Qdb67/Z58bVtaWqzMzEyf7wPhiBlU\nEGzcuFHvvvuuLrzwQuXm5mrTpk3au3ev1/rXX39dM2fO1KBBgxQTE6Mrr7yy15vXRowYoTFjxshm\ns2nMmDGaOnWqJCkzM1PV1dVeHzd8+HCNHz/e7/ifffaZZsyYoZdeesnv9vYRI0Zo7NixkqRx48b5\nXH5PDBs2TBMnTpQk3XDDDdqyZUuXdcOHD1dCQoLee+89rV+/Xnl5eYqLi/M67htvvKEZM2Zo4MCB\nGjJkiKZPn+719diyZYtmzpypc845R4MHD9bMmTP1+uuvd1k7duxYbdiwQQsXLtSWLVsUGxvr9zn+\n4he/UEFBga644gqvNZs2bVJRUZHi4+Mlyedzk6T7779f69ev17Zt2zR//ny/Pfhzcgbd3NysQYMG\naeLEidq2bZu2bNmi/Pz80+p7sr7n5OTos88+U11dnXbu3Km4uDglJyf3uueTevJ71t31TQrdOr9s\n2TLl5ORo4sSJqqmp0b///e+gjNtfBPUw80hWXFysxYsXd6vWZrN1+kXpbThJ0tlnn93x84ABAzRw\n4MCOn48fP+71cYMHD+7W+EOHDtXw4cP1+uuvKyMjo9u9nHXWWT43jfTEN7fbW5blczv+zTffrOef\nf14NDQ0qKSnxO253X4+uar31kZaWph07dujVV1/Vfffdp4KCAv3mN7/xOvYLL7yg/fv3+91H8u0e\n/Pn888919OhRtbW16dixYzr33HO7rIuKiuq0adrb6xYdHa0RI0bohRde0KRJkzR27Fht2rRJn3zy\nSZfrRk/X91mzZmn16tWqr6/Xdddd152nGBI9Wd9Csc57PB5t3LhRW7du1aBBg3TJJZeotbW11+P2\nJ8yggqCgoECrV6/Wf//7X0lSY2Oj9u3b57X+4osvVnl5ub788ks1Nzdr3bp1xu80HThwoP7xj39o\nxYoVWrlyZZ/0sG/fPm3dulWS9NJLL3X51/pJV111lSoqKrRt2zZNmzbN57iTJ0/WK6+8otbWVh05\nckSvvvqq19cjPz9f5eXlOnbsmI4ePary8nKvfdTV1WnQoEG6/vrrddddd2n79u1ee3j33Xe1dOnS\nbh0Ic+mll+rvf/+7GhsbJanjX29++tOf6sEHH9ScOXN87nex2+367LPP1NjYqNbWVq1bt85rbX5+\nvpYsWaIpU6YoPz9fTz31lPLy8rqs7en6fu2112rlypVavXq1Zs2a5fO59VRMTIyam5u7VduT9S0U\nDh8+rLi4OA0aNEgff/xxRy+RhBlUEIwePVoPPvigCgsL1d7erujoaC1fvlznn39+l/W5ubm69tpr\nlZ2drcTERF100UV+/2r359s137zu6/HdDUabzaZzzz1X69atk8vlUkxMjH70ox/1uBd/y/B136hR\no/TEE0+opKREY8aM0e233+61Pjo6Wpdeeqni4uL8Lv/CCy/UlVdeqbFjx8putysrK0vf+c53uqzN\nzc3VTTfd1LFZ9JZbblF2dnaXtbt27dLdd9/dMaP1dXjzE088oYMHD+qSSy6RJF100UV6+umnu6x1\nOBy69957NWXKFJ111lnKy8vTc88912XtihUrdPbZZ+u6665Te3u7Jk2aJI/HI6fTeVptdHS07r//\nfo0fP17JyclyOBw+g3rx4sWaOHGizjnnHJ1zzjle38C/vb7726TscDh05MgRpaSkyG63+6w9qbvr\nWEJCgiZPnqysrCxdfvnlPr+zrifrW0/X+e70e9lll+mpp56Sw+HQqFGjOjY3RhI+qGuARYsWaciQ\nIbrzzjv7upU+88UXXwR12317e7vGjRun1atX64ILLvBbf/ToUQ0ePFgtLS2aMmWKnnnmGeXk5ASl\nF/Q/1dXVmj59unbt2tXXrUQ0NvEZwvRNfKF04MABTZo0SXfffXdQxquqqlJaWpqmTp3arXCSpFtv\nvVW5ubkaN26crrnmGsIJEf07aQpmUAAAIzGDAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGOn/\nARTQq3riH9t+AAAAAElFTkSuQmCC\n",
-       "text": [
-        "<matplotlib.figure.Figure at 0xaeb102cc>"
-       ]
-      }
-     ],
-     "prompt_number": 5
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "plot_frequency_histogram(normalised_english_counts, sort_key=lambda l: normalised_english_counts[l])"
+      "freqs_7a = pd.Series(collections.Counter([l.lower() for l in c7a if l in string.ascii_letters]))\n",
+      "freqs_7a.plot(kind='bar')"
      ],
      "language": "python",
      "metadata": {},
      "outputs": [
       {
        "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAawAAAEkCAYAAABzKwUZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHx5JREFUeJzt3X9QVXX+x/HXNSgLpNQxG++lUCF+KF5QkFHXpGwXtXTM\ntJg03aQidx23xmprahNn+1ZMuptGP7CZtXHb3B/ujrjKMq26d0ZLl0zsx6CNFtQFw9rMwF8E18/3\nD4siL+deEMSPPB8zZ7zH8z6f+zmHw33xOefce13GGCMAAM5zvbq7AwAAhIPAAgBYgcACAFiBwAIA\nWIHAAgBYgcACAFghZGCVlZUpKSlJCQkJKiwsPGP5vn37NGbMGPXu3VvLly8/Y3kgEFB6erqmTp3a\nOT0GAPRIEU4LA4GAFi5cqM2bN8vtdiszM1PTpk1TcnJyS03//v31/PPPa/369UHbWLFihVJSUtTQ\n0NC5PQcA9CiOI6zy8nLFx8crLi5OkZGRys3NVUlJSauaAQMGKCMjQ5GRkWesX1NTo9LSUt19993i\n/ckAgLPhGFi1tbWKjY1tmfd4PKqtrQ278QceeEDPPvusevXiUhkA4Ow4JonL5epwwxs3btSVV16p\n9PR0RlcAgLPmeA3L7XbL7/e3zPv9fnk8nrAafuutt7RhwwaVlpbq5MmTqq+v19y5c7VmzZpWdWlp\naXr33Xc70HUAwIXG6/Vqz549wRcaB01NTWbIkCGmqqrKNDY2Gq/XayorK4PWLlmyxCxbtizoMp/P\nZ26++eagy0J0wXpLliyh9jzqB7Xtrz1f+kFtx+tt4pQJjiOsiIgIFRUVKScnR4FAQHl5eUpOTlZx\ncbEkKT8/X3V1dcrMzFR9fb169eqlFStWqLKyUtHR0a3aOpvTiwAAOAaWJE2ePFmTJ09u9X/5+fkt\nj6+66qpWpw2DmTBhgiZMmNDBLgIAIF1UUFBQ0J0dWLp0qbq5C10uLi6O2vOoH9S2v/Z86Qe1Ha+3\nhVMmuL49Z9htXC4XdxECACQ5ZwJvkAIAWIHAAgBYgcACAFiBwAIAWIHAAgBYgcACAFiBwAIAWIHA\nAgBYgcACAFiBwAIAWIHAAgBYgcACAFiBwAIAWIHAAgBYgcACAFiBwAIAWIHAAgBYgcACAFiBwAIA\nWIHAAgBYgcACAFiBwAIAWIHAAgBYgcACAFiBwAIAWIHAAgBYIazAKisrU1JSkhISElRYWHjG8n37\n9mnMmDHq3bu3li9f3vL/fr9f119/vYYNG6bhw4dr5cqVnddzAECP4jLGGKeCQCCgxMREbd68WW63\nW5mZmVq7dq2Sk5Nbar744gt98sknWr9+vfr27avFixdLkurq6lRXV6e0tDQdPXpUo0aN0vr161ut\n63K5FKILAIAewikTQo6wysvLFR8fr7i4OEVGRio3N1clJSWtagYMGKCMjAxFRka2+v+rrrpKaWlp\nkqTo6GglJyfr4MGDHd0OAEAPFjKwamtrFRsb2zLv8XhUW1vb7ieqrq5WRUWFsrKy2r0uAPRUMTH9\n5HK5HKeYmH7d3c1zIiJUgcvlOusnOXr0qGbOnKkVK1YoOjr6rNsDgJ6ioeErSc6XTRoazv512gYh\nA8vtdsvv97fM+/1+eTyesJ+gqalJt956q+bMmaPp06cHrSkoKGh5nJ2drezs7LDbBwDYy+fzyefz\nhVUb8qaL5uZmJSYmasuWLRo0aJBGjx59xk0X3ykoKFCfPn1abrowxmjevHnq37+/fv/73wfvADdd\nAECbTp/lCvUaeeG8jjplQsjAkqR//etfuv/++xUIBJSXl6dHH31UxcXFkqT8/HzV1dUpMzNT9fX1\n6tWrl/r06aPKykrt2bNH1113nUaMGNFyavHpp5/WpEmTwuocAPR0BNYPloUTWF2JwAKAthFY3+OT\nLgAAViCwAABWILAAAFYgsAAAViCwAABWILAAAFYgsAAAViCwAABWILAAAFYgsAAAViCwAABWILAA\nAFYgsAAAViCwAABWILAAAFYgsAAAViCwAABWILAAAFYgsAAAViCwAABWILAAAFYgsAAAViCwAABW\nILAAAFYgsAAAViCwAABWILAAAFYgsAAAVggZWGVlZUpKSlJCQoIKCwvPWL5v3z6NGTNGvXv31vLl\ny9u1LgAA4XIZY0xbCwOBgBITE7V582a53W5lZmZq7dq1Sk5Obqn54osv9Mknn2j9+vXq27evFi9e\nHPa6kuRyueTQBQDo0Vwul6RQr5EXzuuoUyY4jrDKy8sVHx+vuLg4RUZGKjc3VyUlJa1qBgwYoIyM\nDEVGRrZ7XQAAwuUYWLW1tYqNjW2Z93g8qq2tDavhs1kXAIAfcwys00PRjjmbdQEA+LEIp4Vut1t+\nv79l3u/3y+PxhNVwe9YtKChoeZydna3s7OywngMAYDefzyefzxdWreNNF83NzUpMTNSWLVs0aNAg\njR49OuiNE9Lp0OnTp0/LTRfhrstNFwDQNm66+J7jCCsiIkJFRUXKyclRIBBQXl6ekpOTVVxcLEnK\nz89XXV2dMjMzVV9fr169emnFihWqrKxUdHR00HUBAOgIxxHWOekAIywAaBMjrO/xSRcAACsQWAAA\nKxBYAAArEFgAACsQWAAAKxBYAAArEFgAACsQWAAAKxBYAAArEFgAACsQWAAAKxBYAAArEFgAACsQ\nWAAAKxBYAAArEFgAcI7FxPSTy+VynGJi+nV3N887fIEjAJxj7flSRr7A8XuMsAAAViCwAABWILAA\nAFYgsAAAViCwAABWILAAAFYgsAAAViCwAABWILAAAFYgsAAAViCwAABWCBlYZWVlSkpKUkJCggoL\nC4PWLFq0SAkJCfJ6vaqoqGj5/6efflrDhg1Tamqq7rjjDjU2NnZezwEAPYpjYAUCAS1cuFBlZWWq\nrKzU2rVrtXfv3lY1paWlOnDggPbv369Vq1ZpwYIFkqTq6mq98sor2r17t95//30FAgH9+c9/7rot\nAQBc0BwDq7y8XPHx8YqLi1NkZKRyc3NVUlLSqmbDhg2aN2+eJCkrK0tHjhzRoUOHFBMTo8jISB0/\nflzNzc06fvy43G53120JAOCC5hhYtbW1io2NbZn3eDyqra0Nq6Zfv35avHixrr76ag0aNEhXXHGF\nbrzxxk7uPgCgp3AMrNPfwxJasO8u+eijj/Tcc8+purpaBw8e1NGjR/WnP/2pY70EgPMcX8rY9SKc\nFrrdbvn9/pZ5v98vj8fjWFNTUyO32y2fz6exY8eqf//+kqQZM2borbfe0uzZs894noKCgpbH2dnZ\nys7O7si2AEC3aWj4SqG+aLGhIbxBQE/i8/nk8/nCKzYOmpqazJAhQ0xVVZVpbGw0Xq/XVFZWtqrZ\ntGmTmTx5sjHGmB07dpisrCxjjDEVFRVm2LBh5vjx4+bUqVNm7ty5pqio6IznCNEFALCCJCOZEJO6\ntPZC4LQtjiOsiIgIFRUVKScnR4FAQHl5eUpOTlZxcbEkKT8/X1OmTFFpaani4+MVFRWl1atXS5LS\n0tI0d+5cZWRkqFevXho5cqTuvffeDiUwAACubxOt+zrgcgW9BgYA3S0mpt+3p/ra1qdPX9XXH/72\nmn+o17LTr3ddVXshcMoEAgsA2nA+hBCB9T0+mgkAYAUCCwBgBQILAGAFAgsAYAUCCwBgBQILAGAF\nAgsAYAUCCwBgBQILAGAFAgsAYAUCCwBgBQILAGAFAgsAYAUCCwBgBQILAGAFAgsAYAUCCwBgBQIL\nAGAFAgtAjxIT008ul8txionp193dRBAEFgDrhQqhHwZQQ8NXkozjdLoG5xsCC8B5p72joFAhRABd\nGCK6uwMA8GPfB5BTjevcdAbnDUZYAAArEFgAzgludsDZ4pQggHOC03w4W4ywAABWILAAAFYIGVhl\nZWVKSkpSQkKCCgsLg9YsWrRICQkJ8nq9qqioaPn/I0eOaObMmUpOTlZKSop27tzZeT0HAPQojoEV\nCAS0cOFClZWVqbKyUmvXrtXevXtb1ZSWlurAgQPav3+/Vq1apQULFrQs+9WvfqUpU6Zo7969eu+9\n95ScnNw1WwEAuOA5BlZ5ebni4+MVFxenyMhI5ebmqqSkpFXNhg0bNG/ePElSVlaWjhw5okOHDunr\nr7/Wtm3bNH/+fElSRESELr/88i7aDADAhc4xsGpraxUbG9sy7/F4VFtbG7KmpqZGVVVVGjBggO66\n6y6NHDlS99xzj44fP97J3QcA9BSOgeVyhXeLqTGtb1V1uVxqbm7W7t279Ytf/EK7d+9WVFSUnnnm\nmY73FADQozm+D8vtdsvv97fM+/1+eTwex5qamhq53W4ZY+TxeJSZmSlJmjlzZpuBVVBQ0PI4Oztb\n2dnZ7d0OAN0gJqZfyM/p69Onr+rrD5+jHsE2Pp9PPp8vvGLjoKmpyQwZMsRUVVWZxsZG4/V6TWVl\nZauaTZs2mcmTJxtjjNmxY4fJyspqWTZ+/Hjz4YcfGmOMWbJkiXn44YfPeI4QXQBwHpNkJBNiUpfW\nhlffntqu73NX7gvbOW2L4wgrIiJCRUVFysnJUSAQUF5enpKTk1VcXCxJys/P15QpU1RaWqr4+HhF\nRUVp9erVLes///zzmj17tr755hsNHTq01TIAANrD9W2idV8HXK4zroEBsMPp69yhfn9P/453VW14\n/WhPbdf3uSv3he2cMoFPugAAWIHAAgBYgcACAFiBwAIAWIHAAgBYgcACAFiBwAIAWIHAAgBYgcAC\nAFiBwAIAWIHAAgBYgcACAFiBwAIAWIHAAgBYgcACAFiBwAIAWIHAAgBYgcACAFiBwAIAWIHAAgBY\ngcACAFiBwAIAWIHAAgBYgcACAFiBwAIAWIHAAgBYgcACAFiBwAIAWCFkYJWVlSkpKUkJCQkqLCwM\nWrNo0SIlJCTI6/WqoqKi1bJAIKD09HRNnTq1c3oMoEvFxPSTy+VynGJi+nV3N9EDOQZWIBDQwoUL\nVVZWpsrKSq1du1Z79+5tVVNaWqoDBw5o//79WrVqlRYsWNBq+YoVK5SSkiKXy9X5vQfQ6RoavpJk\nHKfTNcC55RhY5eXlio+PV1xcnCIjI5Wbm6uSkpJWNRs2bNC8efMkSVlZWTpy5IgOHTokSaqpqVFp\naanuvvtuGWO6aBMAhMKoCRcCx8Cqra1VbGxsy7zH41FtbW3YNQ888ICeffZZ9erFpTKgOzFqwoXA\nMUnCPY3349GTMUYbN27UlVdeqfT0dEZXAICzFuG00O12y+/3t8z7/X55PB7HmpqaGrndbv3973/X\nhg0bVFpaqpMnT6q+vl5z587VmjVrzniegoKClsfZ2dnKzs7u4OYAAGzi8/nk8/nCKzYOmpqazJAh\nQ0xVVZVpbGw0Xq/XVFZWtqrZtGmTmTx5sjHGmB07dpisrKwz2vH5fObmm28O+hwhugCgE0gykgkx\nycra8OrbU3t+bV9794XtnLbFcYQVERGhoqIi5eTkKBAIKC8vT8nJySouLpYk5efna8qUKSotLVV8\nfLyioqK0evXqoG1xlyAA4Gy4vk207uuAy8U1LqCLnf6DMdTv2enfRdtqpXC2rz21Xd/nrtwXtnPK\nBG7fAwBYgcACAFiBwAIAWIHAAgBYgcACAFiBwAIAWIHAAgBYgcACAFiBwAIAWIHAAgBYgcACAFiB\nwAIAWIHAAgBYgcACAFiBwAIsFRPTTy6Xy3GKienX3d0EOo3jFzgCOH81NHylUN+T1NDAF6fiwsEI\nCwBgBQILAGAFAgsAYAUCCziPcCMF0DZuugDOI9xIAbSNERYAwAoEFgDACgQWAMAKBBbQxbiRAugc\n3HQBdDFupAA6ByMsAIAVCCwAgBXCCqyysjIlJSUpISFBhYWFQWsWLVqkhIQEeb1eVVRUSJL8fr+u\nv/56DRs2TMOHD9fKlSs7r+dAJwt1remH15m4LgV0AxNCc3OzGTp0qKmqqjLffPON8Xq9prKyslXN\npk2bzOTJk40xxuzcudNkZWUZY4z57LPPTEVFhTHGmIaGBnPttdeesW4YXQDOCUlGMg6T2lH7fT21\nXVvLz6719tnOaVtCjrDKy8sVHx+vuLg4RUZGKjc3VyUlJa1qNmzYoHnz5kmSsrKydOTIER06dEhX\nXXWV0tLSJEnR0dFKTk7WwYMH2x2qQEcwCgIuLCEDq7a2VrGxsS3zHo9HtbW1IWtqampa1VRXV6ui\nokJZWVln22cgLN/fndf2dLoGgA1CBpbLFd7ttqdHcsHXO3r0qGbOnKkVK1YoOjq6nV0EACCM92G5\n3W75/f6Web/fL4/H41hTU1Mjt9stSWpqatKtt96qOXPmaPr06UGfo6CgoOVxdna2srOz27MNAABL\n+Xw++Xy+8IpDXQBramoyQ4YMMVVVVaaxsTHkTRc7duxoueni1KlT5s477zT3339/hy6wAWdDXLjv\nEbX87Fpvn+2ctiXkCCsiIkJFRUXKyclRIBBQXl6ekpOTVVxcLEnKz8/XlClTVFpaqvj4eEVFRWn1\n6tWSpDfffFOvvfaaRowYofT0dEnS008/rUmTJoWXpsCPxMT0C3ndqU+fvqqvP3yOegTgXHF9m2jd\n1wGXS93cBVjk9LXRUMfL6WOqPbXhtd2e2o71g1p+dmdTeyFwygQ+6QIAYAUCCwBgBQILAGAFAgvd\njk+kABAOvg8L3Y7viwIQDkZY6BKMmgB0NkZY6BKMmgB0NkZYAAArEFgAACsQWAAAKxBYAAArEFgA\nACsQWAAAKxBYCBvvrQLQnXgfFsLGe6sAdCdGWAAAKxBYAAArEFg9HNelANiCa1g9HNelANiCERYA\nwAoEFgDACgQWAMAKBBYAwAoEFgDACgQWAMAKBBYAwAoEFgDACgQWAMAKIQOrrKxMSUlJSkhIUGFh\nYdCaRYsWKSEhQV6vVxUVFe1aFwCAsBgHzc3NZujQoaaqqsp88803xuv1msrKylY1mzZtMpMnTzbG\nGLNz506TlZUV9rrGGBOiC9b7z3/+c17XSjKS+cH0nx/Nf/8zOrvaYPXnT21429ee2s7ab+dDLT+7\n86vWefts57QtjiOs8vJyxcfHKy4uTpGRkcrNzVVJSUmrmg0bNmjevHmSpKysLB05ckR1dXVhrdsT\n+Hw+q2qlrqrtyrap7drarmyb2vbXdqT+wuAYWLW1tYqNjW2Z93g8qq2tDavm4MGDIdft6X78SelL\nly5t81PSQ9X+sL49tQBgC8fAcrnC+5Tu06M4BPuqDqcQ+v6T0r+blrSaP708vNof1renFgCs4XQu\ncceOHSYnJ6dl/qmnnjLPPPNMq5r8/Hyzdu3alvnExERTV1cX1rrGGOP1elu/kjIxMTEx9djJ6/W2\nmUmO34eVkZGh/fv3q7q6WoMGDdJf/vIXrV27tlXNtGnTVFRUpNzcXO3cuVNXXHGFBg4cqP79+4dc\nV5L27Nnj1AUAACSF+ALHiIgIFRUVKScnR4FAQHl5eUpOTlZxcbEkKT8/X1OmTFFpaani4+MVFRWl\n1atXO64LAEBHuAwXoAAAFuCTLiw2bty4TmururpaqampndZeV7fbEStXrlRKSoruvPPO7u5Kt4uO\njm73OgUFBVq+fHkX9MZZVx9Dnfl71BFff/21XnrppW7tgy0ILIu9+eab3d0Fq7z00kvavHmz/vjH\nP3Z3V7pduHcAd3QdY4w1dw939+/RV199pRdffLFb+2ALAquLFBcXKz09Xenp6Ro8eLBuuOGGNmv/\n7//+T4mJiRo/frzuuOOOsP+KDfVX8ttvvy2v16vGxkYdO3ZMw4cPV2VlZch2P/74Y40cOVLvvPNO\n0OWPPvpoq1+wUH95Nzc3a86cOUpJSdGsWbN04sSJoHXV1dVKSkoKq1aSfvvb3yopKSms/Xbffffp\n448/1qRJk/Tcc8+1WfedNWvWyOv1Ki0tTXPnzg1as2TJEq1YsaJl/rHHHtPKlSvPqHv22Wf1/PPP\nS5IeeOABTZw4UZK0detWzZkzp1Xtd/vgrrvuUmJiombPnq033nhD48aN07XXXqu33377jPZ/PAJZ\ntmyZli5dGnIbw/HDY/PDDz90rK2urlZiYqLmzZun1NRU1dTUtFl77Ngx3XTTTUpLS1Nqaqr++te/\nOrYdCAR07733avjw4crJydHJkyfb7ENycnJYtd8Jd7R5yy23KCMjQ8OHD9crr7ziWPu73/1Oqamp\nSk1NbXWMBPPII4/oo48+Unp6un7961871r722mvKyspSenq67rvvPp06dSqsvl8wnG5rx9lramoy\n48ePNxs3bgy6fNeuXSY1NdWcOHHC1NfXm/j4eLN8+fKw2o6Ojg5Z8/jjj5sHH3zQ/PKXvwz6toLv\nVFVVmeHDh5t9+/aZ9PR0895777VZW1FRYSZMmNAyn5KSYmpqatps1+VymbfeessYY8z8+fPNsmXL\nzrq2vLzcpKWlmcbGRtPQ0GASEhJC7re4uDjz5ZdfOtYYY8wHH3xgrr322pbaw4cPB62rrq42I0eO\nNMYYEwgEzNChQ4PW7ty508yaNcsYY8xPfvITk5WVZZqamkxBQYFZtWpVq9qqqioTERFhPvjgA3Pq\n1CkzatQoM3/+fGOMMSUlJWb69OlntP/dz+47y5YtMwUFBY7bGM6x095js6qqyvTq1cv897//Ddn2\nunXrzD333NMy//XXXzu2GxERYd59911jjDG33Xabee2118669jvh7Atjvj8Ojh8/boYPH97msfTd\nfjt+/Lg5evSoGTZsmKmoqGiz3erq6lY/v7ZUVlaaqVOnmubmZmOMMQsWLDBr1qwJq+8XCkZYXWzR\nokWaOHGibrrppqDLt23bphkzZqh3797q06ePpk2b1qmnUp544gm98cYb2rVrlx5++GHH2s8//1zT\np0/X66+/7njNIC0tTZ9//rk+++wzvfvuu+rbt6/cbneb9bGxsRozZowkac6cOdq+fftZ17755pua\nPn26Lr74YkVHR2vq1Kmdtt+2bt2q2267Tf36nX6Td9++fYPWXXPNNerfv7/27NmjN954QyNHjgxa\n+91otaGhQb1799aYMWO0a9cubd++XePHjz+jfvDgwRo2bJhcLpeGDRumG2+8UZI0fPhwVVdXd8o2\nhqMjx+Y111yj0aNHh2x7xIgR+ve//61HHnlE27dvV0xMjGP94MGDNWLECEnSqFGjHPdDe2rbY8WK\nFUpLS9OYMWNUU1Oj/fv3B63bvn27ZsyYoUsvvVRRUVGaMWOGtm3b1ma74R63W7Zs0TvvvKOMjAyl\np6dr69atqqqq6tC22MrxtnacnVdffVV+v9/x/LTL5Wp1wHZmWEnS//73Px07dkyBQEAnTpzQZZdd\n1mbtFVdcoWuuuUbbtm1TUlKSY7uzZs3SunXrVFdXp9zcXMfaH177MMY4XgsJt7Yr99uP23Zy9913\na/Xq1Tp06JDmz58ftCYyMlKDBw/Wq6++qrFjx2rEiBHaunWrDhw4EHQ/X3LJJS2Pe/XqpYsvvrjl\ncXNz8xn1ERERrU4NOZ1GbY+O7OOoqKiw2k5ISFBFRYU2bdqkxx9/XBMnTtRvfvObNut/uE8uuugi\nx21sT224fD6ftmzZop07d6p37966/vrr1djYGLQ22H7ryDXDYObNm6ennnqqU9qyESOsLvLOO+9o\n+fLlIS/wX3fddVq/fr1OnjyphoYGbdy4sdMObun0e+WefPJJ3XHHHSHPj1988cX6xz/+oTVr1gR9\nk/cP3X777Vq7dq3WrVunWbNmOdZ++umn2rlzpyTp9ddfDzqqaG/tuHHj9M9//lONjY06evSoNm3a\n1Gn77YYbbtDf/vY3HT58WJJa/g3mlltuUVlZmXbt2qWcnJw268aPH69ly5ZpwoQJGj9+vF5++WWN\nHDmyU/o7cOBAff755zp8+LAaGxu1cePGTmm3K4/Nzz77TL1799bs2bP14IMPavfu3Z3Sblepr69X\n37591bt3b+3bt6/lGA1m/PjxWr9+vU6cOKFjx45p/fr1jsd8nz591NDQELIPEydO1Lp16/TFF19I\nOn1cfvrpp+3fGIsxwuoiL7zwgr766itdf/31kqTMzEytWrXqjLr09HTdfvvt8nq9uvLKK5WZmRn2\nX/ehXjzWrFmjSy65RLm5uTp16pTGjh0rn8+n7OzsNtu77LLLtHHjRv30pz9Vnz59dPPNNwetTUlJ\n0dGjR+XxeDRw4EDHPiYmJuqFF17Q/PnzNWzYMC1YsKDN+nBrMzIyNG3aNI0YMUIDBw5UamqqLr/8\n8rZ3hsK/yy0lJUWPPfaYJkyYoIsuukgjR47UH/7wh6C1kZGRuuGGG9S3b1/H9sePH6+nnnpKY8aM\n0aWXXqpLL720zRexH7fzw/lgzxEZGaknnnhCo0ePltvtVkpKSshtDWdf/PjYDOdUX7j7+P3339dD\nDz3UMoIMdVu30z45m9pwlkvSpEmT9PLLLyslJUWJiYktp62DSU9P189//vOW/XXPPffI6/W2Wd+/\nf3+NGzdOqampmjJlSpvfHZicnKwnn3xSP/vZz3Tq1ClFRkbqxRdf1NVXXx2y/xcK3jh8nlm6dKmi\no6O1ePFix7ovv/yyU8/Pnw+qq6s1depUvf/++2HVHzt2TFFRUTp+/LgmTJigV155RWlpaV3cy9ZO\nnTqlUaNGad26dRo6dOg5fW6gp+GU4Hko1F98Bw8e1NixY/XQQw+dox6dO+055XTvvfcqPT1do0aN\n0syZM895WFVWViohIUE33ngjYQWcA4ywAABWYIQFALACgQUAsAKBBQCwAoEFALACgQUAsAKBBQCw\nwv8DbMnA/BWkp54AAAAASUVORK5CYII=\n",
+       "output_type": "pyout",
+       "prompt_number": 4,
        "text": [
-        "<matplotlib.figure.Figure at 0xaeae5cec>"
+        "<matplotlib.axes.AxesSubplot at 0x7fc957f09160>"
        ]
-      }
-     ],
-     "prompt_number": 6
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "c7bf = frequencies(sanitise(c7b))\n",
-      "plot_frequency_histogram(c7bf, sort_key=lambda l: c7bf[l])"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
+      },
       {
        "metadata": {},
        "output_type": "display_data",
-       "png": "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\nZWWllZWVZbW0tFjHjx+3UlJS/K7PMwJ9PTt27LCmTp1qWZZlfe9737NGjRplffXVV1ZJSYn1/PPP\n+3wt77//vtXW1mYNHz7cKi4utizLstavX29NmjTJ5zKTk5P9rsczznymm5ubrRMnTlhDhw61du/e\n7bOmqqrKKigosE6fPm1ZlmXde++91sqVK33WVFdXWzk5OZZlWVZra6s1cODAgP4vtHednlnWN/8v\nhAIjqIvgZz/7mfLy8nTjjTf6bfvaa69p8uTJ6tGjh3r37q2bbrrJ7+6dYcOGafPmzZo3b562b9+u\nmJgYn+2zsrL0ySefqK6uTnv27FFsbKwSExP99u3RRx/Vpk2btHPnTs2ZM8dv+zP69eun0aNHS5Jm\nzJih7du3+2wfzHuwdetWFRYWqm/fvpKk2NhYv/365JNPNGnSJL300kud/l3M4sWLlZWVpdGjR6um\npkb//Oc//db0799fI0eO7NR+tXfdSNKAAQM0bNgwSdLw4cNVXV3ts/3rr7+uSZMmqXv37urVq5cK\nCgoC3mUZqDMj4OPHj6tHjx4aPXq0du7cqe3btys3N/eCdQMGDNDQoUNls9k0dOhQjR8/XpKUnp7u\n93W1x/bt2zV58mRdccUV6tmzpyZPnqzXXnvNZ82WLVv0zjvvaMSIEcrOztbWrVt18OBBnzX9+/dX\nXFyc3n33XW3atEk5OTkB/V9o7zqVFPJ1KIX4MHP4t2LFCh0+fDjgfbU2m+2sFR/IhyAlJUW7d+/W\nK6+8okceeUR5eXn61a9+5bNm6tSpWrdunerr63XbbbcF1LdPP/1UJ0+eVGtrq06dOqUrr7wyoLpv\nfo9gWZbf7xWCeQ/+tyYQffr0Uf/+/fXaa68pLS0toJqoqKizdrMEsrvS4/Foy5Yt2rFjh3r06KHr\nrrtOLS0tfut69uwZUJ86or3rRpIuv/xy7/XLLrvM73sQzPpsr+joaA0YMEArVqzQmDFjNGzYMG3d\nulUff/yxz3X7zdfSrVs3de/e3Xv99OnTIevf+d6DQN7roqIiLViwoF3LuvPOO7V8+XI1NDSouLg4\noJr2rtPOwgiqC73zzjtatGhRu75Evfbaa1VeXq4vvvhCx48f18aNG/1+kOvq6tSjRw/dfvvteuCB\nB7Rr1y6/y7n11lu1evVqrVu3TlOnTg2obz/+8Y/1+OOPa/r06e3a53zo0CHt2LFDkvTSSy/5/ItW\nCu49uP766/XXv/5VjY2NkuT915fu3bvrb3/7m1auXKnVq1cH9Frsdrs++eQTNTY2qqWlRRs3bvRb\nc+zYMcXGxqpHjx766KOPvO+FCdq7boIxduxYvfzyy2ppadGJEyf0yiuvdMrBD7m5uVq4cKHGjRun\n3NxcPffcc8rJyQn5coKRm5ur8vJynTp1SidPnlR5ebnf9zovL0/r1q3Tv//9b0lff6YPHTrkd1k3\n33yzKioqtHPnTk2YMCEk/T+f3r176/jx4yF9TkZQXWjp0qX6/PPPdd1110mSrrnmGj3//PM+a7Kz\ns3XrrbcqMzNT8fHxuuaaa/z+xbl37149+OCD3r8AAzn00+Fw6MSJE0pKSpLdbvfbfuXKlbr88st1\n2223qa2tTWPGjJHH45HT6fRbO3jwYC1dulTFxcUaOnSo7r33Xp/t//c9CGQ3l8Ph0MMPP6xx48bp\nsssuU05Ojl588UWfNTabTVdeeaU2btwol8ul3r176wc/+IHPmujoaD366KMaOXKkEhMT5XA4/G5s\nb7jhBj333HNyOBwaPHiwd5eaP8FsxNtTY7PZ2r1uzrcMf8scMWKEbrrpJg0bNkx2u10ZGRn61re+\nFXAfA5Wbm6sFCxZo9OjRuuKKK3TFFVf4DQFfryWQkX6gsrOzdccdd3g/y3fddZcyMzN91gwZMkSP\nP/648vPz1dbWpujoaJWVlenqq6/2WRcdHa3rr79esbGxAfexvetUkuLi4jR27FhlZGRo4sSJITkf\nID/UvcTMnz9fvXr10v3333+xuxKU6upqFRQUaO/evRe7K7iITp48qZ49e6q5uVnjxo3TsmXLlJWV\ndbG7FZba2to0fPhwrVu3TgMHDrzY3WkXdvFdgkz+LUggLvX+o+PuvvtuZWdna/jw4ZoyZQrh1Emq\nqqqUkpKi8ePHX3LhJDGCAgAYihEUAMBIBBQAwEgEFADASAQUAMBIBBQAwEgEFADASP8PW/f+Q9EK\neawAAAAASUVORK5CYII=\n",
+       "png": "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\n",
        "text": [
-        "<matplotlib.figure.Figure at 0xaeb95f8c>"
+        "<matplotlib.figure.Figure at 0x7fc957f08978>"
        ]
       }
      ],
-     "prompt_number": 7
+     "prompt_number": 4
     },
     {
      "cell_type": "code",
      "collapsed": false,
      "input": [
-      "plot_frequency_histogram(c7bf)"
+      "freqs_7b = pd.Series(collections.Counter([l.lower() for l in c7b if l in string.ascii_letters]))\n",
+      "freqs_7b.plot(kind='bar')"
      ],
      "language": "python",
      "metadata": {},
      "outputs": [
       {
        "metadata": {},
-       "output_type": "display_data",
-       "png": "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\nrClTplhHjhyxLMuybr31Vmvp0qVB+8rMzAx6v7+ptrbWKigosNrb260DBw5YWVlZQce2a9cuKyEh\nwdq2bZtlWZZVVlZmPf/880H76tevn+1x7dq1y8rNzbU+/PBDq7Cw0Hr33Xdt19rt59j9eO+996zO\nzk5r1KhRVkVFhWVZlrVy5Upr6tSpAetCuf/HtoG2tjbr4MGD1ogRI6ytW7cGHV+o22c429qxvnr1\n6mW9+eabQdtalmWtWLHCuummm7p+37dvn606v99v5ebm2mp7bFzfbL9w4UKrsrIyYM3WrVutCRMm\ndP3ucrms+vr6U7bftGmTNX36dMuyLOt73/ueNWbMGOurr76yKisrrSeffDJgX/fcc491xx13WD/9\n6U9P+NrPyfj9fquoqMiyLMvq6OiwLrjgAluvIZZlWV999ZVVXFxsrV692lb7YJhBRdnixYtVUFCg\nsWPHqr6+Xv/617+C1gwaNEhjx46VJF133XXauHFjwPbr169XWVmZBg4cKElKTk4O2serr76qadOm\nqU+fPurfv7+uuOKKoLtQ1q1bp7ffflsXXnihCgsLtX79eu3atStoX6F67bXXNHXqVPXu3Vv9+vXT\nlClTbO3eGTJkiEaOHClJGjVqlPx+f8TH9sknn2jq1Kl64YUXeuyzwiFDhmjEiBFyOBwaMWKEJk2a\nJEnKzc0NeJ9Cvf8bN27UtGnTdM4556hv376aNm2aXn311aDjC3X7DGdbO2bw4MEaPXq0rbYjR47U\n2rVrNW/ePG3cuFFJSUm26uyOpTsKCgr0ySefqLGxUdu2bVNycrLS09NP2f7Y7PzAgQPq06ePxo4d\nq82bN2vjxo0qLi4O2Ne9996rNWvWaPPmzZozZ07QsQ0ePFgpKSl65513tGbNGhUVFdl6DZGkn//8\n5yopKdHll19uq30wET3MHIH5fD6tW7dOmzZtUp8+fTRx4kS1t7cHrfvm5xWWZQX9/MLhcIT8n+x/\na+zWl5eXa8GCBSH1Fapwx3b22Wd3/XzWWWfZ2vUUqgEDBmjw4MF69dVXlZOTE/Hbl46/H7169VLv\n3r27fj5y5IitOjv3/2SPs53Pyrq7fYayrfbt29d226ysLG3dulUvv/yy7rnnHpWUlOjXv/617Xq7\nEhISjtu1bXc7mz59ulasWKGmpiZdc801AdsmJiZqyJAheu655zRu3DiNHDlS69ev10cffRR0u/v0\n00916NAhdXR06PDhwzr33HODju3GG2/Us88+q+bmZlVUVNi6P88995z27NkT0c/vmEFF0f79+5Wc\nnKw+ffroww8/1KZNm2zV7d69u6vtCy+8EPQd0yWXXKK//e1vamlpkaSufwO5+OKLVV1drS+++EIH\nDhzQ6tWrg77QlJSUaMWKFfrPf/7T1c/u3bvt3KWQjB8/Xi+99JLa29t18OBBvfzyy8YcZNC7d2/9\n/e9/19KlS7Vs2bLTPZxuKS4uVnV1tQ4fPqxDhw6puro66LYmhb59hrOthaOxsVF9+vTRtddeqzvu\nuENbtmyxVde/f38dOHDAdj9Op1OffPKJWlpa1N7ertWrV9uqu/rqq7Vs2TKtWLFC06dPD9q+uLhY\nCxcu1IQJE1RcXKwnnnhCRUVFQet+8pOf6P7779fMmTNtfaYmHf2svKamRps3b9bkyZODtn/77be1\naNGiiB/4xAwqii699FI98cQTcrlcGjZsWNdukUAcDoeGDRumxx57TBUVFRoxYoRuvfXWgDUul0t3\n3323JkyYoLPOOktFRUV65plnAtYUFhbq6quvVn5+vlJTU23tRhk+fLjuv/9+lZaWqrOzU4mJiVqy\nZInOP//8oPcpFBdeeKGuuOIKjRw5Uk6nU3l5efrWt74VtO5/+wl1NmCHw+HQueeeq9WrV8vj8ah/\n//76wQ9+ENF+At2PQLcT6v0vLCzUDTfc0PXc33TTTcrPzw86vlC3z//d1i666CLbs6hQHrft27fr\nzjvv7Jp12j10PCUlRePHj1deXp4uu+yyoOe1S0xM1L333qvRo0crPT1dLpfL1jhdLpcOHjyojIwM\nOZ3OoO2Li4u1YMECjR07Vuecc47OOeecoG8Gli5dqrPPPlvXXHONOjs7NW7cOPl8Prnd7qD36ZJL\nLlFycrKt+/LYY4/p888/18SJEyVJF110kZ588smgdcHwRV2cEQ4dOqS+ffuqra1NEyZM0FNPPaWC\ngoLTPay45/f7NWXKFG3fvj3s25g/f7769eun22+/PYIjQ3d0dnZq1KhRWrFihS644ILTNg528eGM\ncPPNN6uwsFCjRo3SVVddRTgZJBK750zZZQuprq5OWVlZmjRp0mkNJ4kZFADAUMygAABGIqAAAEYi\noAAARiKgAABGIqAAAEYioAAARvp/fPP9PvjmFnQAAAAASUVORK5CYII=\n",
+       "output_type": "pyout",
+       "prompt_number": 10,
        "text": [
-        "<matplotlib.figure.Figure at 0xaeaa372c>"
+        "<matplotlib.axes.AxesSubplot at 0x7fc957efdc18>"
        ]
-      }
-     ],
-     "prompt_number": 8
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "plot_frequency_histogram(normalised_english_counts)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
+      },
       {
        "metadata": {},
        "output_type": "display_data",
-       "png": "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\nMEAjR45s8cIJ6Uzo9OrVq+mii1DX5aKLrsVFFwDCiVMmOM6wIiIiVFhYqNzcXAUCAc2bN0/Jyckq\nKiqSJOXn5+vQoUPKzMxUbW2tevTooRUrVqiiokLR0dEtrgsAQHs4zrAuSAPMsLoUMywA4aTdl7UD\nABAuCCwAgBUILACAFQgsAIAVCCwAgBUILACAFQgsAIAVCCwAgBUILACAFQgsAIAVCCwAgBUILACA\nFQgsAIAVCCwAgBUILACAFQgsAGEnJqaPXC6X4y0mpk9Xt4kLjA9wvMjxAY4IR7wuL158gCMAwHoE\nFgDACgQWAMAKBBYAwAoEFgDACgQWAMAKBBYAwAoEFgDACgQWAMAKBBYAwAoEFgDACkEDq7S0VElJ\nSUpISNDSpUtbrFm4cKESEhLk9XpVXl7e9P1nnnlGQ4YMUVpamu68807V19efv84BABcVx8AKBAJa\nsGCBSktLVVFRobVr12rv3r3NakpKSnTgwAHt379fq1at0vz58yVJVVVVevXVV7V792598MEHCgQC\n+vOf/9x5IwEAdGuOgVVWVqb4+HjFxcUpMjJSeXl5Ki4ublazYcMGzZkzR5KUlZWlo0eP6vDhw4qJ\niVFkZKROnDihxsZGnThxQm63u/NGAgDo1hwDq6amRrGxsU3LHo9HNTU1IdX06dNHixYt0rXXXqsB\nAwboqquu0k033XSe2wcAXCwcA+vMZ9IE19Jnl3z88cd6/vnnVVVVpYMHD+rYsWP605/+1L4uAZyD\nDznExSbC6U632y2/39+07Pf75fF4HGuqq6vldrvl8/k0evRo9e3bV5I0bdo0vf3225o5c+Y5j1NQ\nUND0dU5OjnJyctozFuCiUlf3tYJ9yGFdXWi/dAJdxefzyefzhVZsHDQ0NJhBgwaZyspKU19fb7xe\nr6moqGhWs2nTJjNx4kRjjDE7duwwWVlZxhhjysvLzZAhQ8yJEyfM6dOnzezZs01hYeE5jxGkBXQy\nSUYyQW48R+GoOz933XlscOb0vDrOsCIiIlRYWKjc3FwFAgHNmzdPycnJKioqkiTl5+dr0qRJKikp\nUXx8vKKiorR69WpJUnp6umbPnq0RI0aoR48eGjZsmO677752JTAAAK7vEq3rGnC5WjwHZqOYmD7f\nHaZpXa9evVVbe+QCdRTcmfOUwfZ/93mOupPu/Nx157HBmVMmEFjnkY0/ZDb2jDO683PXnccGZ06Z\nwFszAQCsQGABAKxAYAEArEBgAQCsQGABAKxAYAEArEBgAQCsQGABAKxAYAEArEBgAQCsQGABAKxA\nYAEArEBgAQCsQGABAKxAYAEArEBgAQCsQGABAKxAYAEArEBgwSoxMX3kcrkcbzExfbq6TQCdgMCC\nVerqvpZkHG9nauxEIAOtI7DQ5fhP+nvdPZCBjojo6gaA7/+TdqpxXZhmAIQtZlgAACsQWAAuCA79\noqM4JAjgguDQLzqKGRYAwAoEFgDACkEDq7S0VElJSUpISNDSpUtbrFm4cKESEhLk9XpVXl7e9P2j\nR49q+vTpSk5OVkpKinbu3Hn+OgcAXFQcAysQCGjBggUqLS1VRUWF1q5dq7179zarKSkp0YEDB7R/\n/36tWrVK8+fPb7rvV7/6lSZNmqS9e/fq/fffV3JycueMAgDQ7TkGVllZmeLj4xUXF6fIyEjl5eWp\nuLi4Wc2GDRs0Z84cSVJWVpaOHj2qw4cP65tvvtG2bds0d+5cSVJERISuvPLKThoGAKC7cwysmpoa\nxcbGNi17PB7V1NQEramurlZlZaX69eunu+++W8OGDdO9996rEydOnOf2AQAXC8fAcrlCu8TUmOaX\nqrpcLjU2Nmr37t36xS9+od27dysqKkrPPvts+zsFAFzUHP8Oy+12y+/3Ny37/X55PB7Hmurqarnd\nbhlj5PF4lJmZKUmaPn16q4FVUFDQ9HVOTo5ycnLaOg4AXSAmpk/Q9zbs1au3amuPXKCOYBufzyef\nzxdasXHQ0NBgBg0aZCorK019fb3xer2moqKiWc2mTZvMxIkTjTHG7Nixw2RlZTXdl52dbT766CNj\njDGLFy82jzzyyDmPEaQFq0gykglyC6/xhkPPbekhHPrtTLbti87qNxzGhq7h9Lw6zrAiIiJUWFio\n3NxcBQIBzZs3T8nJySoqKpIk5efna9KkSSopKVF8fLyioqK0evXqpvVfeOEFzZw5U99++60GDx7c\n7D4AANrC9V2idV0DLtc558BsdeacX7CxhNd4w6HntvQQDv12Jtv2RWf1Gw5jQ9dwygTe6QIAYAUC\nCwBgBQILAGAFAgsAYAUCCwBgBQILAGAFAgsAYAUCCwBgBQILAGAFAgsAYAUCCwBgBQILAGAFAgsA\nYAUCCwBgBQILAGAFAgsAYAUCCwBgBQILAGAFAgsAYAUCCwBgBQILAGAFAgsAYAUCCwBgBQILAGAF\n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\nrY7prLKyMpOenm7q6+tNXV2dSUhIaLWHyspKExERYd577z1jjDG33367ef311x23Hx0d7Xh/e9ap\nrKw0qampZt++fSYjI8O8//77Hdrm2XF9+OGH5vTp02b48OFm7ty5xhhjiouLzdSpU1tdJ5R9cfZ5\nPnHihDl27JgZMmSIKS8vb7WXUF9rbXn9nN12jx49zH//+99Wa85at26duffee5uWv/nmm1Zrq6qq\nTGpqatBtnu3hh7XLli0zBQUF59SVl5ebsWPHNi2npKSY6urqFre5c+dOM2PGDGOMMT/5yU9MVlaW\naWhoMAUFBWbVqlUtrvPEE0+Yhx56yPzyl79s8c95zqqqqjLDhg0zxhgTCATM4MGDHX+mjTGmoaHB\nZGdnm40bNzrWdUfMsDrRihUrlJ6erlGjRqm6ulr79+9vtTY2NlajRo2SJM2aNUvbt29vsW7r1q26\n/fbb1afPmT8U7N27d6vb3LZtm6ZNm6aePXuqV69emjJlSquHabZs2aJ3331XI0aMUEZGhrZu3arK\nyspQh9qqt956S1OnTtWll16q6OhoTZ482fFQ0cCBAzV06FBJ0vDhw1VVVdXhHtrjiy++0NSpU/XG\nG2+cl/OLAwcO1JAhQ+RyuTRkyBDddNNNkqTU1NRWxxjqvti+fbumTZumyy+/XFFRUZo2bZq2bdvW\nai+hvtba8vo567rrrtPIkSMdayRp6NCh+ve//61HH31U27dvV0xMTKu1wR6zPdLT0/XFF1/o888/\n13vvvafevXvL7Xa3WHt2hl1XV6eePXtq1KhR2rVrl7Zv367s7OwW13nyySf15ptvateuXXrkkUda\n7eO6665T3759tWfPHr355psaNmyY48+0dObNxsePH6+bb7459AF3E46XtaP9fD6ftmzZop07d6pn\nz54aN26c6uvrW63/4TkQY0yr50RcLlfIP8A/rg223pw5c/T000+HtO1QtbWHyy67rOnrSy65xPFw\nVWe66qqrdN1112nbtm1KSkrq8PZ+OK4ePXro0ksvbfq6sbEx6DpO+6Klfex0Tq29r7VQXndRUVFB\nayQpISFB5eXl2rRpk5544gmNHz9ev/nNb0Ja10lERESzQ9lOr58ZM2Zo3bp1OnTokPLy8lqti4yM\n1MCBA/Xaa69p9OjRGjp0qLZu3aoDBw60+tr43//+p+PHjysQCOjkyZO64oorWt3+Pffco9WrV+vw\n4cOaO3eu4/hee+01+f3+i/acHjOsTlJbW6vevXurZ8+e2rdvn3bu3OlY/9lnnzXVvPHGG63+5nbj\njTfqb3/7m44cOSJJTf+25IYbbtD69et16tQp1dXVaePGja3+5zR+/HitW7dOX375ZdN2P/vss6Dj\nDGbMmDH65z//qfr6eh07dkybNm2y4gKFSy+9VP/4xz+0Zs2aFv/gPZxkZ2dr/fr1OnnypI4fP671\n69e3+vqRQn+tteX101aff/65evbsqZkzZ+qhhx7S7t27W63t1auX6urqQtpu//799cUXX+jIkSOq\nr6/Xxo0bW6294447tHbtWq1bt04zZsxw3G52draWLVumsWPHKjs7W6+88oqGDRvWan1+fr6eeuop\n3XnnnUHPu916660qLS3Vrl27lJub22rdu+++q+XLl3fpRU5djRlWJ5kwYYJeeeUVpaSkKDExsekQ\nTEtcLpcSExP14osvau7cuRoyZIjmz5/fYm1KSooef/xxjR07VpdccomGDRumP/zhDy3WZmRk6I47\n7pDX69XVV1/teKgmOTlZTz31lH72s5/p9OnTioyM1EsvvaRrr73Wse9gRowYoSlTpmjo0KHq37+/\n0tLSdOWVV4a8zWCP0Z7/QENZx+Vy6YorrtDGjRv105/+VL169dItt9zS7m06jctphhPKY2RkZOjn\nP/950/N77733yuv1ttpLqK+1H79+MjMzg86yQn0+PvjgAz388MNNs02ny9b79u2rMWPGKC0tTZMm\nTXL8bL3IyEg9+eSTGjlypNxut1JSUlrtKSUlRceOHZPH41H//v0d+83OztbTTz+tUaNG6fLLL9fl\nl1/eatCvWbNGl112mfLy8nT69GmNHj1aPp9POTk5rfZ84403qnfv3o7778UXX9TXX3+tcePGSZIy\nMzO1atUqx767G/5wGJ3u+PHjioqK0okTJzR27Fi9+uqrSk9P75Jevvrqqy49N9bVqqqqNHnyZH3w\nwQdtXnfJkiWKjo7WokWLOqGzi9fp06c1fPhwrVu3ToMHD+7qdsIahwTR6e677z5lZGRo+PDhmj59\nepeF1cGDBzV69Gg9/PDDXfL44aIjh/VsOJxrk4qKCiUkJOimm24irELADAsAYAVmWAAAKxBYAAAr\nEFgAACsQWAAAKxBYAAArEFgAACv8P5ZWvQDqsWNNAAAAAElFTkSuQmCC\n",
+       "png": "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\nuwAAAABJRU5ErkJggg==\n",
        "text": [
-        "<matplotlib.figure.Figure at 0xaeb47b6c>"
+        "<matplotlib.figure.Figure at 0x7fc957eadb00>"
        ]
       }
      ],
-     "prompt_number": 9
+     "prompt_number": 10
     },
     {
      "cell_type": "code",
@@ -198,13 +143,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 10,
+       "prompt_number": 5,
        "text": [
         "'WWPA, AWHCRH MDY IOT NJHGK HJWLSBALH HI AWL BBHLJT, X DTUI PC VC MGPSHN HCK AHXK AVL BCAXS PMILG JAVHPCN IPBL. PZ ESPUCLS AWL RYPAT DPZ SLAPKLGLS AD AWLXY NHGK DU UYXKPF PMILGUDVC, ADV AHIL UVG HCFDUT AD WGVRLHZ XA, PUS AWL QVPYS DPZ THHF IV SLIHRO UYDT IOT IPZT. LMJTSALCA XKTH IV BHZL IOT WPPCAXUV SDVZ SXRT WPYI VU AWL QVM IN AWL LHN - UD-VCL LHH NDPCN IV IBGU XA DCTY IV AVDR XM IOTF SPSU\u2019I RCVL PI DPZ IOTYT, HCK IOTF LLGL EYTAIF JUAPZLAF IV QL AVDRXUV MDY HVBLDUT AD ZBBVNAL P WPPCAXUV PC HCFLHN. \\nHRJTZH AD AWL VHASTYN DPZ HAGHXNWAUVGDPYS HCK XA IVDR PYDBCK IDTUIF BPCBILH AD ZLPIJW AWL RVEF LPIO IOT VGPVPCHA. P WPS AWL EHXUIPCN PTDUV H QBCJW VU YTWGVSBRAXVCZ XU IOT TJZTBB ZWVE HCK RHBWTK DBI MDY IOT UXNWA XU IOT NJHGKH\u2019 IPAWYDVB. AJYCZ DBI AWLN WGLULG AD BHL IOT KXYTJIVGZ\u2019 UHRPAPIPTZ JW DU IOT ADW USDVG. DXAW AWL CLL LMOXIXAXVC VELCPCN DU HHIBGKPF IOT WAHRL LHH IJZN LCVJNW AD ZAPE VJA UPGZI AWPCN PUS, HH HGYPUVLS, P BHSL HBGL X DPZ UPGZI PCAD AWL HODW. X UDD WHKL IOT ODUDBG VU OPCXUV IDBVOI AWL ROTHELHA TCTY LVGR QF SH KPCJX. VG UDA. \\nIOT E-GHN YTZJSIZ RHBL QHRR IOXZ BVGUXUV HCK, PZ NVJ ZJZELRATK, IOXZ XZ DUT VU ZPYP\u2019Z UHZLH. P PT IVAK XA XZ RSDZT AD WTYULRA, QBI, OXKSLC BCKTY IOT SPFTYH VU WPPCA, HOT ZRYXIQSTK P WXJIBGL DM IOT UPGX LPNAL TTQSTT XU ALPK. HOT ZXNCLS PI Z IVD. AWL ILRO VBNZ IOXUZ ZWL BHN OPCT BHLS H QPI VU VAK EPEL APZL P JGHNVC AD KTMPJT AWL QVPYS ITMDYT ZWL HAPYILS DDYZ VC PI. HCFLHN, AWHI STHKLH AWL FBTZIPDU DM LOTYT AWL WLAS IOT YTHA WPPCAXUV TXNWA QL. XA\u2019H OPYS AD ITSXLKL IOPA HOT STMI PI DXAW AWL HZ PUS P RHC\u2019A HLT OTY VVXUV VC AWL GBC DXAW PI ZIBRR JUSLG OTY RVPA. XA\u2019H UDA APZL HOT JDBAK GVAS XA JW. \\nX DDYZLS AWYDBVO HVBL BVGL DM IOT UPGX WPWTYH HCK UVJUS AWPH UDAT. HI STHHA XA ILASH BH DWLGL HOT DTUI. SDVZZ APZL IOT JXWWLG JALGR LHH IPJZ IN AWL LHN. P WHKL BVKLS VC AD CTUXJT AD AGF IV UPCK PUN AGHRL DM HHGH IOTYT, IJA X OPCT H ULTSXUV AWL HVABIPDU IV IOXZ BFHATYN PH IPJZ PC WPYXZ LOTYT PI HAS QLVHC. P ALUA IOT WPPCAXUV HI AWL EHGPH VUMXJT. TPFQL NVJ JDBAK PYGHCNT AD YTAJYC PI? PI ZWVJSS IT LPZXLG AD NTA XA XU IOPU XA LHH AD LMAGHRA XA. \\nPSA AWL QLHA, \\nWHGYN\\n'"
        ]
       }
      ],
-     "prompt_number": 10
+     "prompt_number": 5
     },
     {
      "cell_type": "code",
@@ -218,13 +163,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 12,
+       "prompt_number": 6,
        "text": [
-        "('hp', 0.03214089578198264)"
+        "('hp', -2071.4841308636614)"
        ]
       }
      ],
-     "prompt_number": 12
+     "prompt_number": 6
     },
     {
      "cell_type": "code",
@@ -238,19 +183,19 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 15,
+       "prompt_number": 7,
        "text": [
         "'phil thanks for the guard schedules at the museum i went in on friday and laid low until after closing time as planned the crate was delivered to their yard on friday afternoon too late for anyone to process it and the board was easy to detach from the base excellent idea to make the painting look like part of the box by the way no one was going to turn it over to look if they didnt know it was there and they were pretty unlikely to be looking for someone to smuggle a painting in anyway access to the gallery was straightforward and it took around twenty minutes to switch the copy with the original i hid the painting among a bunch of reproductions in the museum shop and camped out for the night in the guards bathroom turns out they prefer to use the directors facilities upon the top floor with the new exhibition opening on saturday the place was busy enough to slip out first thing and as arranged i made sure i was first into the shop i now have the honour of having bought the cheapest ever work by davinci or not the xray results came back this morning and as you suspected this is one of saras fake siam told it is close to perfect but hidden under the layers of paint she scribbled a picture of the nazi eagle emblem in leads he signed its too the tech guys think she may have used abit of old pipe like a crayon to deface the board before she started work on it anyway that leaves the question of where the hell the real painting might be its hard to believe that she left it with the ss and icant see her going on the run with it stuck under her coat its not like she could roll it up i worked through some more of the nazi papers and found this note atleast it tells us where she went looks like the cipher clerk was back by the way i have moved on to venice to try to find any trace of sara there but i have a feeling the solution to this mystery is back in paris where it all began i left the painting at the paris office maybe you could arrange to return it it should be easier to get it in than it was to extract it all the best harry'"
        ]
       }
      ],
-     "prompt_number": 15
+     "prompt_number": 7
     },
     {
      "cell_type": "code",
      "collapsed": false,
      "input": [
-      "vigenere_frequency_break(sanitise(c7b))"
+      "railfence_break(sanitise(c7b))"
      ],
      "language": "python",
      "metadata": {},
@@ -258,19 +203,19 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 16,
+       "prompt_number": 8,
        "text": [
-        "('aattuualptaaauaaaa', 0.10312795085805967)"
+        "(2, -4150.8334806309485)"
        ]
       }
      ],
-     "prompt_number": 16
+     "prompt_number": 8
     },
     {
      "cell_type": "code",
      "collapsed": false,
      "input": [
-      "' '.join(segment(vigenere_decipher(sanitise(c7b),'aattuualptaaauaaaa' )))"
+      "' '.join(segment(railfence_decipher(sanitise(c7b), 2)))"
      ],
      "language": "python",
      "metadata": {},
@@ -278,13 +223,13 @@
       {
        "metadata": {},
        "output_type": "pyout",
-       "prompt_number": 17,
+       "prompt_number": 9,
        "text": [
-        "'ttmaqoehqveytelettkf vfantitlnhhttprnmews qrfwquefetnntmmohpun kit a murvsoegeomjsemwelpo yotkcoytmamvgijtrhtk pcrnydlmautreryrciti man rtxrnmzeatctythrycyb obmmisfdefehefyfnvws note neetztxkrqcavlennemh tmeemnnfvulnntneyfrt a ohtmohynxzxnzontunrg hubfooznoirdgkiztyqh eodatncnenpgyccwfmai masxprjmmtoktyiheouf jnteemaetxhkyutyaatk ausmmfuccthuyotxmltn tythhtootmnrnusztdsm mkoiyftfhharuianbwha eixyetfoatnboksfiheu ywcrthbfulmrsaetmlpu ymhtryamodjafttteaff ttnwmqtfzwbhntypttmt are dldnrkyhsacctyerfamm tgomtxzumtmtmtanskid jfpoxhothtoaixvidebb ooeryykftffteelratyh qyurtemtvgeutvsfrheo tcmhyalioyuemnefknco trqiitaonfouaywtmmoo that eu uhpyhnzxttontfaaxnsn of lioptnrtovvxzdiepexy not etielahfcariewfhwwh yiwlvmuudehtbbfvvawi ytkbozvrifacjsiwaagb let now oalfdorpballhktfqtku at hvnxwllfmodtqsluhycv lhiyytejglmrzfdemded dweicjqisrnvlmhudewl kb dgcmklhyhkjalxdosdtq in lfs gewambhlohuwejeltww tbjgeudeucklmxatceud same rpfmjtqmorshwzndcgkm zhieuzasrsoekzgbtbqh rktiwgcavlneuqrzhibj leljrlayqybgewqgrkth wlpiyshwfsillxicblls ebwhcyfkrvmhiomkotdo iwmfahyniseiszwfshlt cxrmaotikmnuachvqdov mmatibzhfoadvloawzke nqrcnrgbxrwfdkctsxxa iejzlnerryfidtbwhxbd hluhtfswwnclgdtwwdvk lhazobmargsgwwtopasg men rl on york rodr keewdeelujkdlellythc wexcfrqxagrdiyunehkn ikfruurtslqbdjrcvujp kxghfbldgmistthujsot bids iwcdsiajaqmanpigbcp zoxlurhnlgrtfifiguor gsm mntfcwavanbilwysatnl mvpnafbhzhwxnrzirhra'"
+        "'tbtzfctlkgibeeswffo be w ywthyyliewtetokgfoou youth atttbi be znvhvhanwtipyrmndmve ipzlgkglbffhafcndesf iew nana ngtumemyonanizolhhk at lift xm our rp pbs aol eegaeeonffcbmiydmu hatte bpvonyxiwtlklcyofy it x fttbghpeguthyymwrvhl the ipycyrmnxyddaelfxugo stf cd tek gyd recd cdt wie mba vndrkmiqdlghgmvkltmt btu cd teswtlhkruywcaywumhv vaga myth hkyddaelfxydhoesfwym fknconpwmuhlogeetwgu emebthtltoxhknrpqycd teowfiypnwyttbfdhgte muy deem un vndffvgnxelhihvteyut drm farm t euro ph ft fmc on hkrmgzrgtlxhywozhhnd tcughkrmgzhaubbyfohz hlth h kos to gewegzkgibtttbyqqahk ee on with nvhvcayvtlghpeguyqwr czwhfbmuadiffetwmyrk plc ayyfkmytbogeetwyqizh kee on nhyhdahitipytsfbawef tsrihlklyqubtwyvtltw nhexabfwhhfwmyffukwr cvtmhaubyiogmkqzgifw to yiiwrgtfhahhnyonoitl mxn crm gznhmutltholhtfwmxk rom cay of tt bfdhghhtuklorcaavyqq dpi hvamemcaxtyieutsfboz to mlhsvoolvohayqizhkee on yqwrcvrgtlhaubyiogf pm fcdhktwettsmxfxpauiy xmchttfknrpuggkoyofy it xfttbtwnhexabfwfatf to gh peg uk ltwqwonpwblhgndntywp wtw to me tft hkl yoxhlbomcaklkgyshgmw a wctc htiyuemkgyxutggmrelv ohh my to xrtkurmotwmkte my meth hsmxketlsucdfkpdolre hloltrhmtbowtwbprmpv i for tqurbaogorydriyyyn kgfytbykyynxydefwrgu to try thsklyqubrwtcelmwmv of ayyiukexkglbffrbhly dog tmcbmlhnynthefcyily of ttb fcn des fi ewnccdoltbruqdbabbn but on ypuihaubacypqztomxme on olt bantwnvykutffwiizyih gnu to xrtgtlofngthyttqurrp nad vcahhfbliiliwpytsntr mth of om ogre tgdatftbibezxhywhx ont rest bile bertl'"
        ]
       }
      ],
-     "prompt_number": 17
+     "prompt_number": 9
     },
     {
      "cell_type": "code",
diff --git a/2014-challenge7.ipynb b/2014-challenge7.ipynb
new file mode 100644
index 0000000..35d298f
--- /dev/null
+++ b/2014-challenge7.ipynb
@@ -0,0 +1,387 @@
+{
+ "metadata": {
+  "name": "",
+  "signature": "sha256:3a4749bad5690e746e43cddb887ed31282398e12c90470d01010a2e6a024c527"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+  {
+   "cells": [
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "import matplotlib.pyplot as plt\n",
+      "import pandas as pd\n",
+      "import collections\n",
+      "import string\n",
+      "%matplotlib inline\n",
+      "\n",
+      "from cipherbreak import *\n",
+      "\n",
+      "c7a = open('2014/7a.ciphertext').read()\n",
+      "c7b = open('2014/7b.ciphertext').read()"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [],
+     "prompt_number": 1
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "freqs = pd.Series(english_counts)\n",
+      "freqs.plot(kind='bar')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 2,
+       "text": [
+        "<matplotlib.axes.AxesSubplot at 0x7f51e347e1d0>"
+       ]
+      },
+      {
+       "metadata": {},
+       "output_type": "display_data",
+       "png": "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\n",
+       "text": [
+        "<matplotlib.figure.Figure at 0x7f521042a0f0>"
+       ]
+      }
+     ],
+     "prompt_number": 2
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "freqs_7a = pd.Series(collections.Counter([l.lower() for l in c7a if l in string.ascii_letters]))\n",
+      "freqs_7a.plot(kind='bar')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 3,
+       "text": [
+        "<matplotlib.axes.AxesSubplot at 0x7f51e3496278>"
+       ]
+      },
+      {
+       "metadata": {},
+       "output_type": "display_data",
+       "png": "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\n/Os4hwAAAABJRU5ErkJggg==\n",
+       "text": [
+        "<matplotlib.figure.Figure at 0x7f51e349fda0>"
+       ]
+      }
+     ],
+     "prompt_number": 3
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "freqs_7b = pd.Series(collections.Counter([l.lower() for l in c7b if l in string.ascii_letters]))\n",
+      "freqs_7b.plot(kind='bar')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 4,
+       "text": [
+        "<matplotlib.axes.AxesSubplot at 0x7f51e33869e8>"
+       ]
+      },
+      {
+       "metadata": {},
+       "output_type": "display_data",
+       "png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAD+CAYAAAAnIY4eAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGORJREFUeJzt3X+QJGV9x/H3wikgd+vdVvT4aRaJiFgqiqAppVyQI8RS\noGJMJFFvScVKpCJqKMOBSVhSJblgqVeamMQfcEcElCghYAkBgVEUxFKZ4+A4fulFIHVnyGHuMBEw\nXP54em5nZ2dnunu6Z/rpfb+qpnamZ77zPE9v9zM9n+mdBUmSJEmSJEmSJEmSJEmSpEJdAmwHNnW5\n7xzgWWCibdl5wIPAFuDk0nsnSerreODVzJ/IDwVuAH7M7ER+FNAEngNMAg8Bew2ll5K0iPWbaG8D\nnuiy/BPAn3UsOw24EngG2EqYyI8bsH+SpD7yHDGfBjwK3N2x/KBkecujwME5+yVJSmlJxsc/Dzgf\nWNW2bKzH43dn7pEkKZOsE/nhhPx7Y3L7EOAHwOuAxwjZOW33PTbvCQ4/fPfDDz+cuaOStMhtBI7O\nWzxJ97NWoPuHnc8FDgMepvvR+u6FXHDBBQve14t11lm3OOpi6GNZdfRIOPpl5FcCtwNHAI8AZ3ZO\nym3XNwNXJT+vB87q1XA3W7duzfJw66yzbpHVxdDHUdT1i1bO6HP/iztuX5RclBgfn2DXrtkTfzZs\n2LDn+rJlK9i5c8couiWpRvYeQZszMzMzXe9Yvnw5k5OTmZ+wynXnn7+G8MZkBpgC1ifXZ3j66TUs\ntC6G3U/rrIuhLoY+llV34YUXAlzY7b5eZ5yUJYl7FoexsTEWTpjGWEzrQlJ+YS7pPmdX6i8vG41G\nretguO1ZZ13d6mLo4yjqKjWRS5KyM1opmdGKpCJEE61IkrKr1EQeSx5lRm6ddaOpi6GPo6ir1EQu\nScrOjLxkZuSSimBGLkk1VqmJPJY8yozcOutGUxdDH0dRV6mJXJKUnRl5yczIJRXBjFySaqxSE3ks\neZQZuXXWjaYuhj6Ooq5SE7kkKTsz8pKZkUsqghm5JNVYpSbyWPIoM3LrrBtNXQx9HEVdpSZySVJ2\nZuQlMyOXVAQzckmqsUpN5LHkUWbk1lk3mroY+jiKun4T+SXAdmBT27KPAfcBG4Grgee33Xce8CCw\nBTg5V48kSZn0y8iPB54ELgNekSxbBdwMPAusTZatAY4CrgCOBQ4GvgEckTyunRn57L1m5JJSGSQj\nvw14omPZTcxOzncChyTXTwOuBJ4BtgIPAcdl7q0kKZNBM/I/AL6eXD8IeLTtvkcJR+apxZJHmZFb\nZ91o6mLo4yjqBpnIPwI8TYhTFmJuIEklW5Kzbhp4C/DmtmWPAYe23T4kWTa/eHqayclJAJYvX87R\nRx/N1NQUU1NTe16RpqamAFLfbslSP4z2kkcBU8mlVV+P8dme7Q2zvdayrP3Le3uU7TUaDdavXw+w\nZ75cSJo/CJoErmP2w85TgI8DbwIeb3tc68PO45j9sPPXmH9U7oeds/f6YaekVAb5sPNK4HbgpcAj\nhEz808BSwoeedwGfSR67Gbgq+Xk9cBYZo5XOV/e61ZmRW2fdYHUx9HEUdf2ilTO6LLukx+MvSi6S\npCHxu1ZKZrQiqQh+14ok1VilJvJY8igzcuusG01dDH0cRV2lJnJJUnZm5CUzI5dUBDNySaqxSk3k\nseRRZuTWWTeauhj6OIq6Sk3kkqTszMhLZkYuqQhm5JJUY5WayGPJo8zIrbNuNHUx9HEUdZWayCVJ\n2ZmRl8yMXFIRzMglqcYqNZHHkkeZkVtn3WjqYujjKOoqNZFLkrIzIy+ZGbmkIpiRS1KNVWoijyWP\nMiO3zrrR1MXQx1HUVWoilyRlZ0ZeMjNySUUwI5ekGqvURB5LHmVGbp11o6mLoY+jqOs3kV8CbAc2\ntS2bAG4CHgBuBJa33Xce8CCwBTg5V48kSZn0y8iPB54ELgNekSy7GHg8+XkusAJYAxwFXAEcCxwM\nfAM4Ani24znNyGfvNSOXlMogGfltwBMdy04FNiTXNwCnJ9dPA64EngG2Ag8Bx2XurSQpkzwZ+UpC\n3ELyc2Vy/SDg0bbHPUo4Mk8tljzKjNw660ZTF0MfR1E36Iedu1k4N2Ch+6anp5mZmWFmZoZ169bN\n6Xyj0ch8u9lsDlRfZnvJ0o7r9Rmf7dneMNtrNpulj6cq7TUaDaanp/fMl72kOY98EriO2Yx8CzAF\nbAMOBG4FjiTk5ABrk583ABcAd3Y8nxn57L1m5JJSKfo88muB1cn11cA1bcvfCTwXOAx4CfC9HM8v\nScqg30R+JXA78FLgEeBMwhH3KsLphycyewS+Gbgq+Xk9cBa9Y5d52t9i1LFubsRSfnvWWVe3uhj6\nOIq6JX3uP2OB5SctsPyi5CJJGhK/a6VkZuSSiuB3rUhSjVVqIo8ljzIjt8660dTF0MdR1FVqIpck\nZWdGXjIzcklFMCOXpBqr1EQeSx5lRm6ddaOpi6GPo6ir1EQuScrOjLxkZuSSimBGLkk1VqmJPJY8\nyozcOutGUxdDH0dRV6mJXJKUnRl5yczIJRXBjFySaqxSE3kseZQZuXXWjaYuhj6Ooq5SE7kkKTsz\n8pKZkUvB+PgEu3Y90fW+ZctWsHPnjiH3KC69MnIn8pI5kUuB+8JgovmwM5Y8yozcOusGr8uzP8Qy\nNjNySVImRisl8+2kFLgvDCaaaEWSlF2lJvJY8igzcuusG7zOjLy4ukEm8vOAe4FNwBXAPsAEcBPw\nAHAjsHyA55ckpZA3I58EbgFeBjwFfBn4OvBy4HHgYuBcYAWwpqPWjHz2XnNBLRruC4MpIyPfCTwD\nPA9Ykvz8D+BUYEPymA3A6TmfX5KUUt6JfAfwceAnhAn8Z4RIZSWwPXnM9uR2arHkUWbk1lk3eJ0Z\neXF1eSfyw4EPEiKWg4ClwLs6HrObBd5HTU9PMzMzw8zMDOvWrZvT+Uajkfl2s9kcqL7M9pKlHdfr\nMz7bs71s+0ODQfaHZrNZ+niq0l6j0WB6enrPfNlL3oz8d4FVwB8mt98NvB44ETgB2AYcCNwKHNlR\na0Y+e6+5oBYN94XBlJGRbyFM3PslT3wSsBm4DlidPGY1cE3O55ckpZR3It8IXAZ8H7g7WfZZYC3h\nSP0BwtH52ixPOvctWP3q5r6lLL8966yrcl2e/SGWsQ27bkmuquDi5NJuB+HoXJI0JH7XSsnMBaXA\nfWEwfteKJNVYpSbyWPIoM3LrrBu8zoy8uLpKTeSSpOzMyEtmLigF7guDMSOXpBqr1EQeSx5lRm6d\ndYPXmZEXV1epiVySlJ0ZecnMBaXAfWEwZuSSVGOVmshjyaPMyK2zbvA6M/Li6io1kUuSsjMjL5m5\noBS4LwzGjFySaqxSE3kseZQZuXXWDV5nRl5cXaUmcklSdmbkJTMXlAL3hcGYkUtSjVVqIo8ljzIj\nt866wevMyIurq9RELknKzoy8ZOaCUuC+MBgzckmqsUpN5LHkUWbk1lk3eJ0ZeXF1g0zky4GvAPcB\nm4HXARPATcADwI3JYyRJJRokI98AfBO4BFgC7A98BHgcuBg4F1gBrOmoMyOfvddcUIuG+8JgemXk\neSfy5wN3AS/uWL4FeBOwHTiA8N7pyI7HOJHP3uvGq0XDfWEwZXzYeRjwn8ClwA+BzxGOyFcSJnGS\nnyuzPGkseZQZuXXWDV5nRl5cXd6JfAnwGuAzyc+f0yVCYYGX3+npaWZmZpiZmWGfffZjbGyMsbEx\nTjjhhD3Xx8bGGB+foNFozBlct9vNZrPn/UXfztJesrTjenntDXt8tmd72faHBoPsD81ms/TxVKW9\nRqPB9PT0nvmyl7zRygHAHYQjc4A3AucRopYTgG3AgcCt9IlW6v52q+7jk9JyXxhMGdHKNuAR4Ijk\n9knAvcB1wOpk2WrgmpzPL0lKaZDTD98PXA5sBF4JfBRYC6winH54YnI7g0aujsx961bdurqPzzrr\nMlYOra261y3JVRVsBI7tsvykAZ5TkpTRyL9rpe65Wd3Hp+KMj0+wa9cTXe9btmwFO3fuiLo994XB\nlHEe+SCcyGfvjX58Ks6wt5W6t1c3EX1pViNfVSQ5Vt3HZ12xdcPeXmJoL5bf3bDrKjaRS5KyMlop\nWd3Hp+LUPepwXxhMRNGKJCmrik3kjXxVkeRYdR+fdcXWxZBZD7u9WH53ZuSSpEzMyEtW9/GpOHXP\nrN0XBmNGLkk1VrGJvJGvKpIcq+7js67Yuhgy62G3F8vvLqbvWpHUxbD/9F0yIy9Z3cen+fL+zuue\nWbsvDMaMXJJqrGITeSNfVSQ5Vt3HZ92ClUOti2X7NCMvrq5iE7kkKSsz8pLVfXx+sDdf3TPyvL/z\nuu8LZfP7yEfI8cU9vjzqPpHHMr66iejDzka+qkhyLMdXbHux1NU9Ix9mXSy/c88j10gYkUjxMlop\nWSzj8+1ycWJZl0YrcYkoWqmu8fEJxsbGul7GxydG3T1Ji1jFJvJGvqoh5FEhdtidXG5tu757wUii\nS4vZOtiqMtONui6W9WlGHm/doBP53sBdwHXJ7QngJuAB4EZg+YDPL0nqY9CM/E+BY4BlwKnAxcDj\nyc9zgRXAmo6aKDPyuueCdR/fMMWyLs3I41JWRn4I8Bbg821PfiqwIbm+ATh9gOeXJKUwyET+SeDD\nwLNty1YC25Pr25PbGTRydcTMs9i6uo/P9Vlse2bko6/Lex75W4GfEvLxqQUe0/o0cJ7p6WkmJyfb\nljTanqaR/Ay3WwObmlr4drPZ7Hl/Ebfn9rXZpb90rXd81RhfddZneMxC9Z3rr9/6H3R8edtrewTD\nHF+z2ex5f7/+Zv19jrK9RqPB+vXrATrmy/nyZuQXAe8GfgnsC4wDVwPHEn5D24ADCad3HNlRa0ae\nom7Y6j6+YYplXZqRx6WMjPx84FDgMOCdwC2Eif1aYHXymNXANTmfX5KUUlHnkbdeStcCqwinH56Y\n3M6gkavxYedRsWSejq8adbGsTzPyeOuK+K6VbyYXgB3ASQU8pyQpJb9rJaW654J1H98wxbIuzcjj\n4netSFKNVWwib+SrMvMstK7u43N9FtueGfno6yo2kUuSsjIjT6nuuWDdxzdMsaxLM/K4mJFLUo1V\nbCJv5Ksy8yy0ru7jc30W254Z+ejrKjaRS5KyMiNPqe65YN3HN0yxrEsz8riYkUtSjVVsIm/kqzLz\nLLSu7uNzfRbbnhn56OsqNpFLkrIyI0+p7rlg3cc3TLGsSzPyuJiRS1KNVWwib+SrMvMstK5u4xsf\nn2BsbKzrZXx8ovR+xrI+zcjjravYRC4Vb9euJ5j9F7K7Cf+BMFwP90lxW3QZ+fj4xII777JlK9i5\nc0f3ntQ8F6zz+OqePedlRh6XXhl5Ef8hKCqzR2fd7hvF65okDaZi0UojX1WNM0EwIy+6ru7bWSz9\nNCMvrq5iE7kkKatFl5GbC3ZX5/HVfRvLy30hLp5HLkkpFXW66jBVbCJv5KuqcSYI8WTIdR9fVddn\ncRNPuvZGWTeMbWXu6aq3tl1Pf7pqLBn5oYQR3gvcA5ydLJ8AbgIeAG4Elud8fkkpeZ688mbkBySX\nJrAU+AFwOnAm8DhwMXAusAJY01FrRp6ibtjqPD63sbjrhq2q/SwjI99GmMQBngTuAw4GTgU2JMs3\nECZ3SVKJisjIJ4FXA3cCK4HtyfLtye0MGrk6UNXssqi6WDLkuo8vlvVZ57q6byt56wb9y86lwFeB\nDwC7Ou5rBXbzTE9PMzk52bakAUy1XWfP7dbApqYWvt1sNnve3347b3tza5td6im0vbzjy3t78Y4v\nPKYq7XWuv37rf7G017rdbDZ73t+vv9l/f63gYWrPkjTbS9b2uo2v0Wiwfv16gI75cr5BziN/DvA1\n4HpgXbJsC2HE24ADCZ+6HNlRZ0aeom7Y6jw+t7G464atqv0sIyMfA74AbGZ2Ege4FlidXF8NXJPz\n+SVJKeWdyN8AvAs4AbgruZwCrAVWEU4/PDG5nUEjV2fqnl3GkgvWfXyxrM8619V9W8lblzcj/zYL\nvwiclPM5JUk5+F0rKdszF4x3fHn7GMt319e9btiq2k+/j1zKwe+uVyz8rpUI6mLJBR2fdWXXxbKt\nDLufFZvIJUlZmZGnbM9cMN7xxfI7t2702wpUt59+H7kk1VjFJvJGvqqaZ6Wx5IKOz7oy6vJ+33ox\n39Oero/zqszIJWlW3n/0UMQ/iIiFGXnK9swF4x1fLL9z6+KuK5sZeYRG+3ZSUkwqNpE38lXVMCsd\n7dvJ9P0sos6M3LpqtpW/zoxckpSJGXnK9qyLK0+c04tI1ol1cdeVzYxckmqsYhN5I1+VWWnUdWbk\n1lWzrfx1WbbNIk5QqNhELkmLSxEnKESbkftd0XHXDVMs68S6uOvyStteLb+P3O+KlqSgYtFKw7pF\nWGdGbl0128pfN+xtM9ojci0+eeM0qe6izciti7suj1jGZt3irMuriIy8YtGKJCmrMibyU4AtwIPA\nudlKGzmbtC7mOrNu66rZVv66YW/TRU/kewN/S5jMjwLOAF6WvryZs1nrYq5rNuPop3VVqIuhj8Pf\npoueyI8DHgK2As8AXwJOS1/+s5zNWhdTXedfsn3oQx/K+VW71RyfdWXWVbeP7dt1+zadbbvO18+i\nJ/KDgUfabj+aLJP2mPuXbLuBC/Zcr9t/btHiMXe7voD2bbzs7broiXzAj3O3WmedddZVpK146oo+\n/fD1wAwhIwc4D3gW+Ju2xzSBVxXcriTV3Ubg6GE0tAR4GJgEnkuYtDN82ClJqoLfBO4nfOh53oj7\nIkmSJFVbFb4mcAJ4CbBP27Jv9anZDzgLeCPhA9bbgL8HflFw385pu76b2fXV+lD3E33q9wJ+HzgM\n+CvgRcABwPcK7GO7c5jfz/8GfkDvE1T3Bd5OiMRa37+zm9DnIn0HeAPwJPM/GN8N7AA+BvzdAvXH\nEMbS7q3A1wrsY7tjgfOZv15e2adukPV5NHA8s9v1xhQ1efaHMeAQ5p5lVkUXdFlWxrYZtVH/if57\ngW8CNwAXAv9G+LC0n8sIf3D0KcIfIL0c+KeUdSvabk8Al/R4/DJgKWECeR9wEOF0yj8GXpOivc8A\nvw78XnL7yWTZQlpj+GCK5+7mmKRvrX7+ESHq+hy9/8r2X4FTCef+P5lcft7j8d9Jfj4J7Oq47OxR\n94bk51LCum2/jCf9P7tH/eeAV7TdPgP4yx6P79a/NP1suRy4lDApvy25nJqiLuv6bPkA8EXgBcDK\n5Hqv9dGSd3+4PsVjuvkdwu8L4C+AfyHd/vA3KZe1+zmz6/D/CNvzZIq2ziHfqc9fJMxLR2asO6rL\nsqkUdWczd06K0j2Eo4nW0eKRhI2in80pl3XqdlSa5k+pbiNMNi3LkmX93NXxE3ofYW0mTMJ3E15k\nOi9p+rm07fZSwrub5wH39ai7J8VzD8tBPe57MfBDwnbyXsJ4n19iX77T/yFd5V2fm4D9227vnyzr\nJ+/+sIHwR3xZtfr0RsLflL8VuDNF3V1dlqUZX7t9CAd//cwA9wLfBv6E8MKYxomEdwE3AT8Gvkq6\nA6t7CAdLY4T97dPAd1PUfZTweeJVhLP9qpCSZPb95GeT8HYU0m2AXyQc6ba8nnRHIBuZOyFOkG5D\nur+tfyTX709RdyfhawtaG/AL6L4xt5xNmHCfImxE7ZcfpWhvC+FsoZZ92vrZq93P0j8uqIqXEtbR\nDYQdpkwnA18gHPm/Pbn8Voq6vOtzE+HApmU/0m2fefeH+wlHuT9K2tlEOIjop3Xws5YQHULv7et9\nyXP/T1s7mwgnTV+eor12E4SJL61XESbL+4GbU9YsIazD84GfkG5f35/wbui7hEn9fNInHnsRJvEv\nEcZ2EXB4yto9HR6lRwhvK64hvAI+Qe8z4lsb9RLC0dIjhLzsRaRb2R8H7iC8+o0B7yD8kvu5jJBr\nX53UnU44munn04R3GC8k/HJ+G/jzHo//VHL5B0JEktXlhBePa5J+vg24grCRdXuBbK3PvYEzCS8Y\nTyXL0mTBw9I5mU0QNv47KbefqwkvHEsIfw/RcnWfuuPJtz4vJYypfTvrFf21vJbu+8OmPu3+Rorn\n7uYxwovVKsJkvi+9J60rCDHOWmaPWiFEXP/Vp6323/1ehH0pSz7+U2Bb0s4LUjz+ZsL+cgfhaP61\nyXP080vgfwkvvvsSXhyf7Vkx69mkj9sJL6wrgK8A3wA+nOYJqnQYP0XI3W4Anl7gMZM96ncD/56i\nnZcT3j7tBm4h3TsACPlt60Oob9H7CKTdy4A3J9dvpnfEUYRjCVn0bsLO/f0ej53s81xbi+nSwCb7\n3L+1pHbvJ8Q4Wf9ieXKB5VtT1B7D3A8t02xnC7WXpd0s9iccQd5N+JbTAwmfXdxYcDswd2y/JEx2\nz6SoO4uQ5b8Q+Gfgy6Tb1z9JmLx/AdxOiHHuIEzSvWwEriW8yPwK8I+EF/F39Kn7APAewgvN5wkH\nfs8QXrQeJOORuaT5LiW88Cs+f81gfwW5DHg/4eDwqT6PhXAA1ek9KeouBH51gfu6fYDaVZWOyKWq\n2UI4Iqpq5KTivZ/wzvsYwu/9tuRyyyg71c+oM3Kpyk7p/xDVzL6Ez9J+SLoIR5IkSZIkSZIkSZIk\nSVqk/h/e+2Rlj0saNgAAAABJRU5ErkJggg==\n",
+       "text": [
+        "<matplotlib.figure.Figure at 0x7f51e339d7b8>"
+       ]
+      }
+     ],
+     "prompt_number": 4
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "c7as = sanitise(c7a)\n",
+      "c7as"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 5,
+       "text": [
+        "'veyjmyjkrzilysyjeydorulcsrcjnmoiddeugurlogfsnwcrlhckhghmwkejxlyktlagflalvtmgkyyomvlmgkyjosfdrzepwaqgnrzeqzinoaqforkcsltjwdussrzarlhcnajneqzabbakeebatjgoiklgcerzebjidlwmgdussnmljwdgftmlhceeazalasksnbtlmukcvtfwilderhrckuksbjqtfwcpwwfsdydrcsdwsbyfdmfeblhcneqkejohguhussjmciqfmjuqoirzosltfwsfapuwwmmlbzatwhyvnmadcstfstrzedvafsdzwelgpcjaraneanrzeqwwylepkscshmjscaslglmfgcjakqsrwrwlhcuurswyqollhcktyjbmsrbkibwcjwapwdyfapwamxapgulvfgnekwtcjsqiuyjeuatfsdgktgfcravcharlepfodtojlsdssrwncvtmjegffmjccvdcukndarwsgkaukokwtfanediiwtfasmfaqmbpwsamekasqaolscmmpjwodqeyjsyyouzellhcqfgltcvajgcydsfapuatfsjsjypagewdgfsnwcraolkyqleklhcveacpjstckcyfcyjrwscpsncveqaglwdrgdchlmqaljotsrceorwonwrylebnefacjwdckiefebxopmnbwrqwamhepstggnqawykajjeyvyagnawrlwdytosltfwrcxepwnawtmlhcuazdeqanrzejssrhaplodlhcxdydoeturlhcfevlscutggnfsskwrcsljqwmjrgwdgliqwnajynleboirzakgrckeamrceobafgwdyesagtpsnqhoqatggnaapfwryfdrwljkuqohyltfwyuwrcjeydlwmprgwfstgvollulvepktyfdgkhmotfwwfglcssqwmzdygkpmoepwdrzeqgrrgfagmnmtgfgrzeweuqlbcvogfggkrcsljqillelkitwalvwmmlbtupftfjosyhytarlepqilvawkillhyltgeerzegjillepuenlmgyhrforuaruhyfyrzilyuqwfsdbsltfwyasnfsrbdyfsvczihsciwdydoaslqgciwtgftfwmgvdjwodlhcgccsnasnwguewtkwaazaplsfgwgfgrzebwenkeyuazdeqanrzepwgggngvolliksggferzeskwgdlzwanjozdekturatksylwebkokwdghlmeaaqtmyerlhcxujdcmnepsgceankfpgmrzemealagmnepfmcftgxiyergyhratgkillhcarzwsranrwrcktqlondawslmfguwajdhyneydorlojgsczepw'"
+       ]
+      }
+     ],
+     "prompt_number": 5
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "c7bs = sanitise(c7b)\n",
+      "c7bs"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 6,
+       "text": [
+        "'anwaecnndrtwtanireoahsrdntieerdctewayerevaaarpioerobsedescrehlaoitithsdtrinosepeplthtnidtwsduledlhotpeaterhaaredeoaiodtahregerothwhtsureteeinwigiresetpowicooonitseudseechacteofiileonewiotacteodteuneahsedaptryemronmomlexontkemeoyvitsteenhantrertieineotndlhpoplyitewitrsedeevdycfrmnsnaypinmteeneeinahinepritedehveleaorelllvmocnahncepherohjuuvehautathttetoasipowwneedselopgdeslfedterfcaatehjasdtrprleseeretetecneorrsgckamiiwaefutiashaongcthsrenrehtrsthhaceinwtprloghetodaeraloeedeatsomldwedtwefsbelevpdteonoignsavftegsebomcehatietnrsptonthusorecredendcetlwaehesedrncveracuhoihaleinaemeunherdesttstasipedeyleeemtiisiigothntssfolnitretrwhemtkhhswtorcssnererohteencsapeblircnthuleofenrsromrnshmaddaodeatihioroutwevthapeceetovterdleaditewdottttcatkmbhtheicwantnisedwatxankeabovoanmswlprgaispodfogndpedeswrdacttrefhdesyaberretlavod'"
+       ]
+      }
+     ],
+     "prompt_number": 6
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "key_a, score = vigenere_frequency_break(c7as)\n",
+      "key_a, score"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 7,
+       "text": [
+        "('say', -1726.4679903722085)"
+       ]
+      }
+     ],
+     "prompt_number": 7
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "' '.join(segment(vigenere_decipher(c7as, key_a)))"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 8,
+       "text": [
+        "'dear mark things area lot clearer now i flew out to inspect the ship myself last night and took a good look around the reason the ship was not scuttled was that the valves had jammed it looks like the driftwood was pulled into the mechanism and blocked the inlet presumably the crew had already abandoned the vessel which was lucky for us without the ship we would have had no idea that the fda had been operating in these waters seahorse is no longer a mystery the cutaway on the starboard side cleared an area of around five meters square with a distinctive pattern of bolts fastened to reinforced deck plates i saw something like this on a sub rescue mission a couple of years ago when they fitted a local ship with a jury rigged inspection system the deck plates can carry a crane designed to deploy an rova remote operated vehicle designed for undersea operations i was already concerned about the reference to the cables in the last part of the fda log but the next section has me really worried it is encrypted with a more secure modified amsco transposition cipher and tells us what they were really up to what i dont understand is how the whole assembly is powered the sort of computing they must be doing is really intensive and would burn through a battery in days in that time their intercept might not catch anything useful but they can hardly have hijacked a local socket in the middle of the ocean can you get me a chart showing the deepsea cables in the region i dont imagine the us will be a problem but it may need some diplomacy to get the full coverage maps from the omani government if i am right it is in their best interests to playalong we all have alot to lose here'"
+       ]
+      }
+     ],
+     "prompt_number": 8
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "key_b, score = amsco_break(c7bs)\n",
+      "key_b, score"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 9,
+       "text": [
+        "(((1, 2, 0, 4, 3), (2, 1)), -1902.8377732825452)"
+       ]
+      }
+     ],
+     "prompt_number": 9
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "' '.join(segment(amsco_transposition_decipher(c7bs, key_b[0], fillpattern=key_b[1])))"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 10,
+       "text": [
+        "'phase seven we approached the cable junction undercover of night with nautilus at an elevation of three feet towing seahorse to starboard comms interception showed that we remained undetected and seahorse was deployed at operating depth the various layers of armoured protection were removed from the cable and as expected once the steel jacket was removed the other layers provided little resistance the divers entered the water and cut into the core to insert the optical repeaters linking them back to the man in the middle unit which was powered up and fully tested initial tests showed that it was operating as expected and three keys have already been recovered from the omani transmissions with daylight approaching the remaining tests were postponed for the following night and the ship returned to deeper waters where it remained at low deck height the divers were left at seahorse to decompress slowly and will be recovered tomorrow once the final tests have been concluded'"
+       ]
+      }
+     ],
+     "prompt_number": 10
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "transpositions[key_b[0]]"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 12,
+       "text": [
+        "['cable',\n",
+        " 'facto',\n",
+        " 'facts',\n",
+        " 'gabon',\n",
+        " 'hafts',\n",
+        " 'hefts',\n",
+        " 'ibexs',\n",
+        " 'kabul',\n",
+        " 'lacys',\n",
+        " 'ladys',\n",
+        " 'laius',\n",
+        " 'lefts',\n",
+        " 'macon',\n",
+        " 'macro',\n",
+        " 'macys',\n",
+        " 'malts',\n",
+        " 'melon',\n",
+        " 'melts',\n",
+        " 'negro',\n",
+        " 'oahus',\n",
+        " 'obeys',\n",
+        " 'obits',\n",
+        " 'odets',\n",
+        " 'pacts',\n",
+        " 'pants',\n",
+        " 'pelts',\n",
+        " 'pints',\n",
+        " 'piotr',\n",
+        " 'pious',\n",
+        " 'plots',\n",
+        " 'plows',\n",
+        " 'ploys',\n",
+        " 'rafts',\n",
+        " 'rants',\n",
+        " 'remus',\n",
+        " 'rents',\n",
+        " 'riots',\n",
+        " 'scout',\n",
+        " 'shout',\n",
+        " 'snout',\n",
+        " 'cabbed',\n",
+        " 'cabbie',\n",
+        " 'cabbys',\n",
+        " 'cabral',\n",
+        " 'dabble',\n",
+        " 'faeroe',\n",
+        " 'gabbro',\n",
+        " 'ibexes',\n",
+        " 'jaguar',\n",
+        " 'kaboom',\n",
+        " 'kaftan',\n",
+        " 'lacuna',\n",
+        " 'lagoon',\n",
+        " 'lefter',\n",
+        " 'legume',\n",
+        " 'macaws',\n",
+        " 'magyar',\n",
+        " 'malays',\n",
+        " 'maltas',\n",
+        " 'mellon',\n",
+        " 'negevs',\n",
+        " 'nellys',\n",
+        " 'nelson',\n",
+        " 'odious',\n",
+        " 'paddys',\n",
+        " 'panzas',\n",
+        " 'peggys',\n",
+        " 'pelves',\n",
+        " 'pennys',\n",
+        " 'photos',\n",
+        " 'pinups',\n",
+        " 'qantas',\n",
+        " 'rabats',\n",
+        " 'rallys',\n",
+        " 'refuse',\n",
+        " 'refute',\n",
+        " 'remuss',\n",
+        " 'renews',\n",
+        " 'repute',\n",
+        " 'scouts',\n",
+        " 'shouts',\n",
+        " 'snouts',\n",
+        " 'cabbage',\n",
+        " 'cabrera',\n",
+        " 'dabbled',\n",
+        " 'gadwall',\n",
+        " 'ladonna',\n",
+        " 'leftest',\n",
+        " 'madonna',\n",
+        " 'malayan',\n",
+        " 'million',\n",
+        " 'papacys',\n",
+        " 'pellets',\n",
+        " 'penneys',\n",
+        " 'qantass',\n",
+        " 'ragtags',\n",
+        " 'refuses',\n",
+        " 'refuter',\n",
+        " 'regrets',\n",
+        " 'rennets',\n",
+        " 'renters',\n",
+        " 'reroute',\n",
+        " 'sallust',\n",
+        " 'macassar',\n",
+        " 'mahatmas',\n",
+        " 'mahayana',\n",
+        " 'nanettes',\n",
+        " 'palatals',\n",
+        " 'phosphor',\n",
+        " 'reenters',\n",
+        " 'phosphors',\n",
+        " 'sinusitis',\n",
+        " 'malayalams',\n",
+        " 'sinusitiss']"
+       ]
+      }
+     ],
+     "prompt_number": 12
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [],
+     "language": "python",
+     "metadata": {},
+     "outputs": []
+    }
+   ],
+   "metadata": {}
+  }
+ ]
+}
\ No newline at end of file
diff --git a/2014/7a.ciphertext b/2014/7a.ciphertext
new file mode 100644
index 0000000..597b991
--- /dev/null
+++ b/2014/7a.ciphertext
@@ -0,0 +1 @@
+VEYJM YJKRZ ILYSY JEYDO RULCS RCJNM OIDDE UGURL OGFSN WCRLH CKHGH MWKEJ XLYKT LAGFL ALVTM GKYYO MVLMG KYJOS FDRZE PWAQG NRZEQ ZINOA QFORK CSLTJ WDUSS RZARL HCNAJ NEQZA BBAKE EBATJ GOIKL GCERZ EBJID LWMGD USSNM LJWDG FTMLH CEEAZ ALASK SNBTL MUKCV TFWIL DERHR CKUKS BJQTF WCPWW FSDYD RCSDW SBYFD MFEBL HCNEQ KEJOH GUHUS SJMCI QFMJU QOIRZ OSLTF WSFAP UWWMM LBZAT WHYVN MADCS TFSTR ZEDVA FSDZW ELGPC JARAN EANRZ EQWWY LEPKS CSHMJ SCASL GLMFG CJAKQ SRWRW LHCUU RSWYQ OLLHC KTYJB MSRBK IBWCJ WAPWD YFAPW AMXAP GULVF GNEKW TCJSQ IUYJE UATFS DGKTG FCRAV CHARL EPFOD TOJLS DSSRW NCVTM JEGFF MJCCV DCUKN DARWS GKAUK OKWTF ANEDI IWTFA SMFAQ MBPWS AMEKA SQAOL SCMMP JWODQ EYJSY YOUZE LLHCQ FGLTC VAJGC YDSFA PUATF SJSJY PAGEW DGFSN WCRAO LKYQL EKLHC VEACP JSTCK CYFCY JRWSC PSNCV EQAGL WDRGD CHLMQ ALJOT SRCEO RWONW RYLEB NEFAC JWDCK IEFEB XOPMN BWRQW AMHEP STGGN QAWYK AJJEY VYAGN AWRLW DYTOS LTFWR CXEPW NAWTM LHCUA ZDEQA NRZEJ SSRHA PLODL HCXDY DOETU RLHCF EVLSC UTGGN FSSKW RCSLJ QWMJR GWDGL IQWNA JYNLE BOIRZ AKGRC KEAMR CEOBA FGWDY ESAGT PSNQH OQATG GNAAP FWRYF DRWLJ KUQOH YLTFW YUWRC JEYDL WMPRG WFSTG VOLLU LVEPK TYFDG KHMOT FWWFG LCSSQ WMZDY GKPMO EPWDR ZEQGR RGFAG MNMTG FGRZE WEUQL BCVOG FGGKR CSLJQ ILLEL KITWA LVWMM LBTUP FTFJO SYHYT ARLEP QILVA WKILL HYLTG EERZE GJILL EPUEN LMGYH RFORU ARUHY FYRZI LYUQW FSDBS LTFWY ASNFS RBDYF SVCZI HSCIW DYDOA SLQGC IWTGF TFWMG VDJWO DLHCG CCSNA SNWGU EWTKW AAZAP LSFGW GFGRZ EBWEN KEYUA ZDEQA NRZEP WGGGN GVOLL IKSGG FERZE SKWGD LZWAN JOZDE KTURA TKSYL WEBKO KWDGH LMEAA QTMYE RLHCX UJDCM NEPSG CEANK FPGMR ZEMEA LAGMN EPFMC FTGXI YERGY HRATG KILLH CARZW SRANR WRCKT QLOND AWSLM FGUWA JDHYN EYDOR LOJGS CZEPW
diff --git a/2014/7b.ciphertext b/2014/7b.ciphertext
new file mode 100644
index 0000000..fb8e3dc
--- /dev/null
+++ b/2014/7b.ciphertext
@@ -0,0 +1 @@
+ANWAE CNNDR TWTAN IREOA HSRDN TIEER DCTEW AYERE VAAAR PIOER OBSED ESCRE HLAOI TITHS DTRIN OSEPE PLTHT NIDTW SDULE DLHOT PEATE RHAAR EDEOA IODTA HREGE ROTHW HTSUR ETEEI NWIGI RESET POWIC OOONI TSEUD SEECH ACTEO FIILE ONEWI OTACT EODTE UNEAH SEDAP TRYEM RONMO MLEXO NTKEM EOYVI TSTEE NHANT RERTI EINEO TNDLH POPLY ITEWI TRSED EEVDY CFRMN SNAYP INMTE ENEEI NAHIN EPRIT EDEHV ELEAO RELLL VMOCN AHNCE PHERO HJUUV EHAUT ATHTT ETOAS IPOWW NEEDS ELOPG DESLF EDTER FCAAT EHJAS DTRPR LESEE RETET ECNEO RRSGC KAMII WAEFU TIASH AONGC THSRE NREHT RSTHH ACEIN WTPRL OGHET ODAER ALOEE DEATS OMLDW EDTWE FSBEL EVPDT EONOI GNSAV FTEGS EBOMC EHATI ETNRS PTONT HUSOR ECRED ENDCE TLWAE HESED RNCVE RACUH OIHAL EINAE MEUNH ERDES TTSTA SIPED EYLEE EMTII SIIGO THNTS SFOLN ITRET RWHEM TKHHS WTORC SSNER EROHT EENCS APEBL IRCNT HULEO FENRS ROMRN SHMAD DAODE ATIHI OROUT WEVTH APECE ETOVT ERDLE ADITE WDOTT TTCAT KMBHT HEICW ANTNI SEDWA TXANK EABOV OANMS WLPRG AISPO DFOGN DPEDE SWRDA CTTRE FHDES YABER RETLA VOD
diff --git a/cipher.py b/cipher.py
index 91e64e5..f7e3ece 100644
--- a/cipher.py
+++ b/cipher.py
@@ -2,7 +2,7 @@ import string
 import collections
 import math
 from enum import Enum
-from itertools import zip_longest, cycle, chain
+from itertools import zip_longest, cycle, chain, count
 import numpy as np
 from numpy import matrix
 from numpy import linalg
@@ -671,6 +671,111 @@ def hill_decipher(matrix, message, fillvalue='a'):
     return hill_encipher(inverse_matrix, message, fillvalue)          
 
 
+# Where each piece of text ends up in the AMSCO transpositon cipher.
+# 'index' shows where the slice appears in the plaintext, with the slice
+# from 'start' to 'end'
+AmscoSlice = collections.namedtuple('AmscoSlice', ['index', 'start', 'end'])
+
+def amsco_transposition_positions(message, keyword, 
+      fillpattern=(1, 2),
+      fillcolumnwise=False,
+      emptycolumnwise=True):
+    """Creates the grid for the AMSCO transposition cipher. Each element in the
+    grid shows the index of that slice and the start and end positions of the
+    plaintext that go to make it up.
+
+    >>> amsco_transposition_positions(string.ascii_lowercase, 'freddy', \
+        fillpattern=(1, 2)) # doctest:  +NORMALIZE_WHITESPACE
+    [[AmscoSlice(index=3, start=4, end=6),
+     AmscoSlice(index=2, start=3, end=4),
+     AmscoSlice(index=0, start=0, end=1),
+     AmscoSlice(index=1, start=1, end=3),
+     AmscoSlice(index=4, start=6, end=7)],
+    [AmscoSlice(index=8, start=12, end=13),
+     AmscoSlice(index=7, start=10, end=12),
+     AmscoSlice(index=5, start=7, end=9),
+     AmscoSlice(index=6, start=9, end=10),
+     AmscoSlice(index=9, start=13, end=15)],
+    [AmscoSlice(index=13, start=19, end=21),
+     AmscoSlice(index=12, start=18, end=19),
+     AmscoSlice(index=10, start=15, end=16),
+     AmscoSlice(index=11, start=16, end=18),
+     AmscoSlice(index=14, start=21, end=22)],
+    [AmscoSlice(index=18, start=27, end=28),
+     AmscoSlice(index=17, start=25, end=27),
+     AmscoSlice(index=15, start=22, end=24),
+     AmscoSlice(index=16, start=24, end=25),
+     AmscoSlice(index=19, start=28, end=30)]]
+    """
+    transpositions = transpositions_of(keyword)
+    fill_iterator = cycle(fillpattern)
+    indices = count()
+    message_length = len(message)
+
+    current_position = 0
+    grid = []
+    while current_position < message_length:
+        row = []
+        for _ in range(len(transpositions)):
+            index = next(indices)
+            gap = next(fill_iterator)
+            row += [AmscoSlice(index, current_position, current_position + gap)]
+            current_position += gap
+        grid += [row]
+    return [transpose(r, transpositions) for r in grid]
+
+def amsco_transposition_encipher(message, keyword, fillpattern=(1,2)):
+    """AMSCO transposition encipher.
+
+    >>> amsco_transposition_encipher('hellothere', 'abc', fillpattern=(1, 2))
+    'hoteelhler'
+    >>> amsco_transposition_encipher('hellothere', 'abc', fillpattern=(2, 1))
+    'hetelhelor'
+    >>> amsco_transposition_encipher('hellothere', 'acb', fillpattern=(1, 2))
+    'hotelerelh'
+    >>> amsco_transposition_encipher('hellothere', 'acb', fillpattern=(2, 1))
+    'hetelorlhe'
+    >>> amsco_transposition_encipher('hereissometexttoencipher', 'cipher', fillpattern=(1, 2))
+    'hecsoisttererteipexhomen'
+    >>> amsco_transposition_encipher('hereissometexttoencipher', 'cipher', fillpattern=(2, 1))
+    'heetcisooestrrepeixthemn'
+    >>> amsco_transposition_encipher('hereissometexttoencipher', 'cipher', fillpattern=(1, 3, 2))
+    'hxomeiphscerettoisenteer'
+    """
+    grid = amsco_transposition_positions(message, keyword, fillpattern=fillpattern)
+    ct_as_grid = [[message[s.start:s.end] for s in r] for r in grid]
+    return combine_every_nth(ct_as_grid)
+
+
+def amsco_transposition_decipher(message, keyword, fillpattern=(1,2)):
+    """AMSCO transposition decipher
+
+    >>> amsco_transposition_decipher('hoteelhler', 'abc', fillpattern=(1, 2))
+    'hellothere'
+    >>> amsco_transposition_decipher('hetelhelor', 'abc', fillpattern=(2, 1))
+    'hellothere'
+    >>> amsco_transposition_decipher('hotelerelh', 'acb', fillpattern=(1, 2))
+    'hellothere'
+    >>> amsco_transposition_decipher('hetelorlhe', 'acb', fillpattern=(2, 1))
+    'hellothere'
+    >>> amsco_transposition_decipher('hecsoisttererteipexhomen', 'cipher', fillpattern=(1, 2))
+    'hereissometexttoencipher'
+    >>> amsco_transposition_decipher('heetcisooestrrepeixthemn', 'cipher', fillpattern=(2, 1))
+    'hereissometexttoencipher'
+    >>> amsco_transposition_decipher('hxomeiphscerettoisenteer', 'cipher', fillpattern=(1, 3, 2))
+    'hereissometexttoencipher'
+    """
+
+    grid = amsco_transposition_positions(message, keyword, fillpattern=fillpattern)
+    transposed_sections = [s for c in [l for l in zip(*grid)] for s in c]
+    plaintext_list = [''] * len(transposed_sections)
+    current_pos = 0
+    for slice in transposed_sections:
+        plaintext_list[slice.index] = message[current_pos:current_pos-slice.start+slice.end][:len(message[slice.start:slice.end])]
+        current_pos += len(message[slice.start:slice.end])
+    return ''.join(plaintext_list)
+
+
 class PocketEnigma(object):
     """A pocket enigma machine
     The wheel is internally represented as a 26-element list self.wheel_map, 
diff --git a/cipherbreak.py b/cipherbreak.py
index b1af48c..8a4d7b1 100644
--- a/cipherbreak.py
+++ b/cipherbreak.py
@@ -464,6 +464,59 @@ def railfence_break(message, max_key_length=20,
                                for i in range(2, max_key_length+1)])
     return max(results, key=lambda k: k[1])
 
+def amsco_break(message, translist=transpositions, patterns = [(1, 2), (2, 1)],
+                                  fitness=Pbigrams, 
+                                  chunksize=500):
+    """Breaks an AMSCO transposition cipher using a dictionary and
+    n-gram frequency analysis
+
+    >>> amsco_break(amsco_transposition_encipher(sanitise( \
+            "It is a truth universally acknowledged, that a single man in \
+             possession of a good fortune, must be in want of a wife. However \
+             little known the feelings or views of such a man may be on his \
+             first entering a neighbourhood, this truth is so well fixed in \
+             the minds of the surrounding families, that he is considered the \
+             rightful property of some one or other of their daughters."), \
+        'encipher'), \
+        translist={(2, 0, 5, 3, 1, 4, 6): ['encipher'], \
+                   (5, 0, 6, 1, 3, 4, 2): ['fourteen'], \
+                   (6, 1, 0, 4, 5, 3, 2): ['keyword']}, \
+        patterns=[(1, 2)]) # doctest: +ELLIPSIS
+    (((2, 0, 5, 3, 1, 4, 6), (1, 2)), -709.4646722...)
+    >>> amsco_break(amsco_transposition_encipher(sanitise( \
+            "It is a truth universally acknowledged, that a single man in \
+             possession of a good fortune, must be in want of a wife. However \
+             little known the feelings or views of such a man may be on his \
+             first entering a neighbourhood, this truth is so well fixed in \
+             the minds of the surrounding families, that he is considered the \
+             rightful property of some one or other of their daughters."), \
+        'encipher', fillpattern=(2, 1)), \
+        translist={(2, 0, 5, 3, 1, 4, 6): ['encipher'], \
+                   (5, 0, 6, 1, 3, 4, 2): ['fourteen'], \
+                   (6, 1, 0, 4, 5, 3, 2): ['keyword']}, \
+        patterns=[(1, 2), (2, 1)], fitness=Ptrigrams) # doctest: +ELLIPSIS
+    (((2, 0, 5, 3, 1, 4, 6), (2, 1)), -997.0129085...)
+    """
+    with Pool() as pool:
+        helper_args = [(message, trans, pattern, fitness)
+                       for trans in translist.keys()
+                       for pattern in patterns]
+        # Gotcha: the helper function here needs to be defined at the top level
+        #   (limitation of Pool.starmap)
+        breaks = pool.starmap(amsco_break_worker, helper_args, chunksize) 
+        return max(breaks, key=lambda k: k[1])
+
+def amsco_break_worker(message, transposition,
+        pattern, fitness):
+    plaintext = amsco_transposition_decipher(message, transposition,
+        fillpattern=pattern)
+    fit = fitness(sanitise(plaintext))
+    logger.debug('AMSCO transposition break attempt using key {0} and pattern'
+                         '{1} gives fit of {2} and decrypt starting: {3}'.format(
+                             transposition, pattern, fit, 
+                             sanitise(plaintext)[:50]))
+    return (transposition, pattern), fit
+
 
 def hill_break(message, matrix_size=2, fitness=Pletters, 
     number_of_solutions=1, chunksize=500):