X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=08-word-chains%2Fexplore-word-chain-4.ipynb;h=d16966dde3f6f16f187a052b47daf216403462c0;hb=a3695711a670f04d92097fc0d664eba25685ebdf;hp=c2bca54e673d7b4e8236f540d5057f7dd72bd263;hpb=295420041326bd9e2d894dac370b17ef3ded5852;p=ou-summer-of-code-2017.git

diff --git a/08-word-chains/explore-word-chain-4.ipynb b/08-word-chains/explore-word-chain-4.ipynb
index c2bca54..d16966d 100644
--- a/08-word-chains/explore-word-chain-4.ipynb
+++ b/08-word-chains/explore-word-chain-4.ipynb
@@ -16,10 +16,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 3,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -27,22 +25,20 @@
        "2336"
       ]
      },
-     "execution_count": 2,
+     "execution_count": 3,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "words = [w.strip() for w in open('08-words.txt').readlines()]\n",
+    "words = [w.strip() for w in open('08-rooms.txt').readlines()]\n",
     "len(words)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 4,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -59,7 +55,7 @@
        " 'achy']"
       ]
      },
-     "execution_count": 3,
+     "execution_count": 4,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -70,7 +66,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 5,
    "metadata": {
     "collapsed": true
    },
@@ -87,7 +83,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 6,
    "metadata": {
     "collapsed": true
    },
@@ -102,7 +98,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 7,
    "metadata": {
     "collapsed": true
    },
@@ -114,10 +110,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 8,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -125,7 +119,7 @@
        "['able']"
       ]
      },
-     "execution_count": 7,
+     "execution_count": 8,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -136,10 +130,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 9,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -147,7 +139,7 @@
        "['axle', 'abbe', 'ably']"
       ]
      },
-     "execution_count": 8,
+     "execution_count": 9,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -158,7 +150,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 10,
    "metadata": {
     "collapsed": true
    },
@@ -171,10 +163,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 11,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -182,7 +172,7 @@
        "0"
       ]
      },
-     "execution_count": 10,
+     "execution_count": 11,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -193,7 +183,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 12,
    "metadata": {
     "collapsed": true
    },
@@ -210,10 +200,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 13,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -221,7 +209,7 @@
        "[['abbe', 'able']]"
       ]
      },
-     "execution_count": 12,
+     "execution_count": 13,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -232,10 +220,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 14,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -243,7 +229,7 @@
        "[['abbe', 'able', 'axle'], ['abbe', 'able', 'ably']]"
       ]
      },
-     "execution_count": 13,
+     "execution_count": 14,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -254,10 +240,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 15,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -265,7 +249,7 @@
        "[['abbe', 'able', 'ably', 'ally']]"
       ]
      },
-     "execution_count": 14,
+     "execution_count": 15,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -276,7 +260,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 16,
    "metadata": {
     "collapsed": true
    },
@@ -302,7 +286,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 17,
    "metadata": {
     "collapsed": true
    },
@@ -330,10 +314,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 18,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
@@ -352,7 +334,7 @@
        "['abbe', 'able', 'ably', 'ally']"
       ]
      },
-     "execution_count": 17,
+     "execution_count": 18,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -363,7 +345,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 19,
    "metadata": {
     "collapsed": true
    },
@@ -389,10 +371,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 20,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
@@ -411,7 +391,7 @@
        "['abbe', 'able', 'ably', 'ally']"
       ]
      },
-     "execution_count": 19,
+     "execution_count": 20,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -422,10 +402,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 21,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
@@ -1113,7 +1091,13 @@
       "['cart', 'part', 'park', 'pars']\n",
       "['cart', 'part', 'pars', 'bars']\n",
       "['cart', 'part', 'pars', 'cars']\n",
-      "['cart', 'part', 'pars', 'ears']\n",
+      "['cart', 'part', 'pars', 'ears']\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
       "['cart', 'part', 'pars', 'jars']\n",
       "['cart', 'part', 'pars', 'mars']\n",
       "['cart', 'part', 'pars', 'oars']\n",
@@ -1567,7 +1551,7 @@
        "['cart', 'cant', 'cans', 'vans']"
       ]
      },
-     "execution_count": 20,
+     "execution_count": 21,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1578,10 +1562,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 22,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -1589,7 +1571,7 @@
        "['cart', 'cant', 'cane', 'vane']"
       ]
      },
-     "execution_count": 21,
+     "execution_count": 22,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1600,10 +1582,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 23,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2188,7 +2168,7 @@
        " 'vane']"
       ]
      },
-     "execution_count": 22,
+     "execution_count": 23,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2199,7 +2179,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 24,
    "metadata": {
     "collapsed": true
    },
@@ -2227,10 +2207,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 25,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
@@ -2248,7 +2226,7 @@
        "['cart', 'cant', 'cane', 'vane']"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 25,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2259,7 +2237,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 26,
    "metadata": {
     "collapsed": true
    },
@@ -2289,10 +2267,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 27,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
@@ -2310,7 +2286,7 @@
        "['cart', 'cant', 'cane', 'vane']"
       ]
      },
-     "execution_count": 26,
+     "execution_count": 27,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2330,10 +2306,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 77,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 28,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2341,7 +2315,7 @@
        "94"
       ]
      },
-     "execution_count": 77,
+     "execution_count": 28,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2367,10 +2341,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 78,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 29,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2378,7 +2350,7 @@
        "2204"
       ]
      },
-     "execution_count": 78,
+     "execution_count": 29,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2389,10 +2361,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 79,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 30,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2400,7 +2370,7 @@
        "1"
       ]
      },
-     "execution_count": 79,
+     "execution_count": 30,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2411,9 +2381,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 80,
+   "execution_count": 31,
    "metadata": {
-    "collapsed": false,
     "scrolled": true
    },
    "outputs": [
@@ -2423,7 +2392,7 @@
        "Counter({1: 75, 2: 6, 3: 7, 4: 2, 5: 2, 6: 1, 2204: 1})"
       ]
      },
-     "execution_count": 80,
+     "execution_count": 31,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2434,10 +2403,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 81,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 32,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2445,7 +2412,7 @@
        "[5]"
       ]
      },
-     "execution_count": 81,
+     "execution_count": 32,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2456,10 +2423,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 82,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 33,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2467,7 +2432,7 @@
        "[{'abbe', 'able', 'ably', 'ally', 'axle'}]"
       ]
      },
-     "execution_count": 82,
+     "execution_count": 33,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2478,10 +2443,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 83,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 34,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2489,7 +2452,7 @@
        "['buns', 'bunk', 'punk']"
       ]
      },
-     "execution_count": 83,
+     "execution_count": 34,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2500,7 +2463,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 84,
+   "execution_count": 35,
    "metadata": {
     "collapsed": true
    },
@@ -2515,7 +2478,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 85,
+   "execution_count": 36,
    "metadata": {
     "collapsed": true
    },
@@ -2538,7 +2501,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 86,
+   "execution_count": 37,
    "metadata": {
     "collapsed": true
    },
@@ -2549,35 +2512,33 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 87,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 38,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "['late', 'lats', 'lets', 'leas', 'seas', 'seam', 'swam', 'sway']\n",
-      "['leap', 'heap', 'hear', 'dear', 'deer']\n",
-      "['peel', 'peek', 'perk', 'park', 'nark']\n",
-      "['sing', 'sang', 'sand', 'said', 'sail', 'hail', 'haul']\n",
-      "['vats', 'bats', 'bets', 'bees', 'been', 'teen', 'then', 'thin', 'this', 'thus', 'thud']\n",
-      "['sues', 'sees', 'seen', 'sewn', 'hewn']\n",
-      "['rash', 'bash', 'bast', 'bait', 'bail', 'hail', 'hair', 'heir']\n",
-      "['apex', 'aped', 'sped', 'seed', 'deed', 'dead', 'deal', 'veal']\n",
-      "['gulf', 'golf', 'gold', 'bold', 'bond', 'bony', 'tony']\n",
-      "['snag', 'shag', 'shat', 'seat', 'peat', 'pent', 'pint', 'mint']\n",
-      "['rife', 'rime', 'rims', 'rums', 'cums', 'cuss']\n",
-      "['diss', 'kiss', 'kits']\n",
-      "['gyps', 'gaps', 'gads', 'wads', 'wade', 'wide', 'tide']\n",
-      "['bilk', 'bill', 'bell', 'tell', 'teal', 'tear', 'tzar']\n",
-      "['logo', 'loge', 'lode', 'lade', 'jade', 'jape']\n",
-      "['hunt', 'bunt', 'buns', 'nuns', 'nubs']\n",
-      "['glow', 'glop', 'plop', 'prop', 'prep', 'peep', 'keep']\n",
-      "['iamb', 'lamb', 'lams', 'laps', 'lips', 'pips']\n",
-      "['pain', 'lain', 'laid', 'land', 'lend', 'vend', 'veld']\n",
-      "['fake', 'bake', 'bare', 'bars', 'ears', 'errs', 'ergs', 'eggs', 'egos']\n"
+      "['drip', 'grip', 'grit', 'gait', 'bait', 'bast', 'base', 'babe']\n",
+      "['cape', 'cope', 'dope', 'dole', 'dolt']\n",
+      "['laze', 'late', 'lats', 'pats']\n",
+      "['zest', 'best', 'bust', 'buss', 'buds', 'suds']\n",
+      "['gape', 'gaps', 'paps', 'peps', 'pees', 'peel']\n",
+      "['yogi', 'yoga', 'toga', 'togs', 'tors', 'tore']\n",
+      "['flux', 'flex', 'fled', 'feed', 'fees', 'foes', 'toes', 'toys']\n",
+      "['bike', 'bake', 'base', 'bast', 'best', 'beet', 'feet']\n",
+      "['tows', 'lows', 'laws', 'lams', 'lame']\n",
+      "['jock', 'pock', 'pork', 'pore', 'pure']\n",
+      "['tabu', 'tabs', 'cabs', 'caws', 'cows', 'cowl', 'coil', 'coif']\n",
+      "['reek', 'week', 'wees', 'weds', 'wads', 'wadi']\n",
+      "['gene', 'gone', 'gong', 'song']\n",
+      "['mete', 'mate', 'bate', 'bats', 'baas', 'bras', 'brag', 'crag', 'cram']\n",
+      "['gnus', 'anus', 'ants', 'acts', 'aces', 'ayes', 'byes', 'bees', 'been', 'teen']\n",
+      "['comb', 'come', 'core', 'corn', 'torn', 'tern']\n",
+      "['ouch', 'much', 'muck', 'buck', 'beck', 'beak', 'beat', 'teat', 'that', 'than', 'khan']\n",
+      "['rids', 'reds', 'reps', 'peps', 'peas', 'peal', 'deal']\n",
+      "['calm', 'balm', 'bald', 'bold', 'bolt', 'bout', 'tout']\n",
+      "['toed', 'toad', 'goad', 'grad', 'gray', 'grey', 'grew']\n"
      ]
     }
    ],
@@ -2589,10 +2550,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 38,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 39,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2600,7 +2559,7 @@
        "['cops', 'coos', 'coon', 'coin', 'chin', 'thin', 'this', 'thus', 'thug']"
       ]
      },
-     "execution_count": 38,
+     "execution_count": 39,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2611,10 +2570,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 39,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 40,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2622,7 +2579,7 @@
        "[2204]"
       ]
      },
-     "execution_count": 39,
+     "execution_count": 40,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2633,10 +2590,28 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 40,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 41,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[2204]"
+      ]
+     },
+     "execution_count": 41,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "[len(r) for r in reachables if 'stay' in r ]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2644,7 +2619,7 @@
        "['hate', 'have', 'hove', 'love']"
       ]
      },
-     "execution_count": 40,
+     "execution_count": 42,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2655,10 +2630,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 41,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 43,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2666,7 +2639,7 @@
        "['wars', 'ware', 'wave', 'wove', 'love']"
       ]
      },
-     "execution_count": 41,
+     "execution_count": 43,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2677,17 +2650,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 61,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 44,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
       "CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n",
-      "Wall time: 210 µs\n"
+      "Wall time: 212 µs\n"
      ]
     },
     {
@@ -2696,7 +2667,7 @@
        "5"
       ]
      },
-     "execution_count": 61,
+     "execution_count": 44,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2707,17 +2678,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 62,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 45,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
       "CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n",
-      "Wall time: 252 µs\n"
+      "Wall time: 203 µs\n"
      ]
     },
     {
@@ -2726,7 +2695,7 @@
        "5"
       ]
      },
-     "execution_count": 62,
+     "execution_count": 45,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2737,17 +2706,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 63,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 46,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
       "CPU times: user 24 ms, sys: 0 ns, total: 24 ms\n",
-      "Wall time: 24.2 ms\n"
+      "Wall time: 23.2 ms\n"
      ]
     },
     {
@@ -2756,7 +2723,7 @@
        "404"
       ]
      },
-     "execution_count": 63,
+     "execution_count": 46,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2767,47 +2734,26 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 64,
+   "execution_count": 47,
    "metadata": {
-    "collapsed": false
+    "collapsed": true
    },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: user 5min 20s, sys: 76 ms, total: 5min 20s\n",
-      "Wall time: 5min 20s\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "5"
-      ]
-     },
-     "execution_count": 64,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "outputs": [],
    "source": [
-    "%time len(bfs_search('wars', 'love'))"
+    "# %time len(bfs_search('wars', 'love'))"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 65,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 48,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 1.44 s, sys: 0 ns, total: 1.44 s\n",
-      "Wall time: 1.43 s\n"
+      "CPU times: user 332 ms, sys: 0 ns, total: 332 ms\n",
+      "Wall time: 331 ms\n"
      ]
     },
     {
@@ -2816,7 +2762,7 @@
        "5"
       ]
      },
-     "execution_count": 65,
+     "execution_count": 48,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2827,10 +2773,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 42,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 49,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2838,7 +2782,7 @@
        "['fear', 'feat', 'fest', 'lest', 'lost', 'lose', 'love']"
       ]
      },
-     "execution_count": 42,
+     "execution_count": 49,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2849,10 +2793,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 43,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 50,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2860,7 +2802,7 @@
        "['fail', 'fall', 'pall', 'pals', 'pass']"
       ]
      },
-     "execution_count": 43,
+     "execution_count": 50,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2871,10 +2813,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 44,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 51,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2882,7 +2822,7 @@
        "['star', 'soar', 'boar', 'boor', 'boon', 'born']"
       ]
      },
-     "execution_count": 44,
+     "execution_count": 51,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2893,10 +2833,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 45,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 52,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2914,7 +2852,7 @@
        " 'pass']"
       ]
      },
-     "execution_count": 45,
+     "execution_count": 52,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2925,10 +2863,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 46,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 53,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2949,7 +2885,7 @@
        " 'past']"
       ]
      },
-     "execution_count": 46,
+     "execution_count": 53,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2960,10 +2896,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 47,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 54,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2971,7 +2905,7 @@
        "[1]"
       ]
      },
-     "execution_count": 47,
+     "execution_count": 54,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -2982,10 +2916,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 48,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 55,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2993,7 +2925,7 @@
        "[2204]"
       ]
      },
-     "execution_count": 48,
+     "execution_count": 55,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -3004,16 +2936,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 49,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 56,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "1 loop, best of 3: 7.9 s per loop\n"
+      "1 loop, best of 3: 8.08 s per loop\n"
      ]
     }
    ],
@@ -3024,16 +2954,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 50,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 57,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "10 loops, best of 3: 141 ms per loop\n"
+      "10 loops, best of 3: 131 ms per loop\n"
      ]
     }
    ],
@@ -3044,10 +2972,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 51,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 58,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -3064,7 +2990,7 @@
        " 'exit']"
       ]
      },
-     "execution_count": 51,
+     "execution_count": 58,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -3075,55 +3001,29 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 88,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "{2: [['heel', 'keel'], ['wane', 'wave'], ['cell', 'sell'], ['cons', 'cobs']],\n",
-       " 3: [['hank', 'haws'], ['bars', 'bets'], ['rats', 'paws'], ['lock', 'hack']],\n",
-       " 4: [['rule', 'sore'], ['wavy', 'rape'], ['peas', 'ping'], ['bond', 'toll']],\n",
-       " 5: [['cope', 'yowl'], ['lose', 'loci'], ['rump', 'dash'], ['four', 'dyes']],\n",
-       " 6: [['boon', 'sell'], ['lots', 'pomp'], ['cola', 'turn'], ['boos', 'laid']],\n",
-       " 7: [['eave', 'inns'], ['meek', 'mere'], ['keys', 'wily'], ['slam', 'yore']],\n",
-       " 8: [['hack', 'flip'], ['crag', 'huge'], ['flux', 'gill'], ['play', 'busy']],\n",
-       " 9: [['lacy', 'whey'], ['wren', 'rook'], ['lire', 'drip'], ['grab', 'lame']],\n",
-       " 10: [['over', 'turn'], ['worn', 'anew'], ['stow', 'elks'], ['ergo', 'rich']],\n",
-       " 11: [['bask', 'idea'], ['gabs', 'thud'], ['idea', 'clod'], ['mark', 'ibis']],\n",
-       " 12: [['umps', 'torn'], ['futz', 'shun'], ['abut', 'face'], ['slug', 'open']],\n",
-       " 13: [['umps', 'skin'], ['chum', 'rats'], ['fury', 'chum'], ['omen', 'zany']],\n",
-       " 14: [['chug', 'gaff'], ['atom', 'fizz']],\n",
-       " 15: [['chug', 'oxen']]}"
-      ]
-     },
-     "execution_count": 88,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "execution_count": 68,
+   "metadata": {},
+   "outputs": [],
    "source": [
-    "solutions = {}\n",
-    "for _ in range(10000):\n",
-    "    start, goal = random.sample(bigset, 2)\n",
-    "    solution = astar_search_closed(start, goal)\n",
-    "    sl = len(solution)\n",
-    "    if sl not in solutions:\n",
-    "        solutions[sl] = []\n",
-    "    if len(solutions[sl]) < 4:\n",
-    "        solutions[sl].append([start, goal])\n",
+    "# solutions = {}\n",
+    "# for _ in range(10000):\n",
+    "#     start, goal = random.sample(bigset, 2)\n",
+    "#     solution = astar_search_closed(start, goal)\n",
+    "#     sl = len(solution)\n",
+    "#     if sl not in solutions:\n",
+    "#         solutions[sl] = []\n",
+    "#     if len(solutions[sl]) < 4:\n",
+    "#         solutions[sl].append([start, goal])\n",
     "        \n",
-    "#     if len(solution) >= 10:\n",
-    "#         solutions += [solution]\n",
+    "# #     if len(solution) >= 10:\n",
+    "# #         solutions += [solution]\n",
     "        \n",
-    "solutions"
+    "# solutions"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 91,
+   "execution_count": 60,
    "metadata": {
     "collapsed": true
    },
@@ -3148,38 +3048,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 54,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[('amen', 'doff', 15), ('chug', 'jinn', 14), ('amen', 'flog', 14)]"
-      ]
-     },
-     "execution_count": 54,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "[(s[0], s[-1], len(s)) for s in solutions if len(s) >= 14]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 55,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 61,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "1 loop, best of 3: 360 ms per loop\n"
+      "1 loop, best of 3: 352 ms per loop\n"
      ]
     }
    ],
@@ -3190,17 +3066,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 56,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 62,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 384 ms, sys: 0 ns, total: 384 ms\n",
-      "Wall time: 385 ms\n"
+      "CPU times: user 452 ms, sys: 0 ns, total: 452 ms\n",
+      "Wall time: 449 ms\n"
      ]
     },
     {
@@ -3209,7 +3083,7 @@
        "14"
       ]
      },
-     "execution_count": 56,
+     "execution_count": 62,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -3220,17 +3094,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 57,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 63,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 124 ms, sys: 0 ns, total: 124 ms\n",
-      "Wall time: 121 ms\n"
+      "CPU times: user 92 ms, sys: 0 ns, total: 92 ms\n",
+      "Wall time: 91.5 ms\n"
      ]
     },
     {
@@ -3239,7 +3111,7 @@
        "15"
       ]
      },
-     "execution_count": 57,
+     "execution_count": 63,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -3250,17 +3122,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 58,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 64,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
       "CPU times: user 32 ms, sys: 0 ns, total: 32 ms\n",
-      "Wall time: 32.4 ms\n"
+      "Wall time: 31.4 ms\n"
      ]
     },
     {
@@ -3269,7 +3139,7 @@
        "14"
       ]
      },
-     "execution_count": 58,
+     "execution_count": 64,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -3280,17 +3150,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 59,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 65,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
       "CPU times: user 16 ms, sys: 0 ns, total: 16 ms\n",
-      "Wall time: 17.1 ms\n"
+      "Wall time: 17.2 ms\n"
      ]
     },
     {
@@ -3299,7 +3167,7 @@
        "14"
       ]
      },
-     "execution_count": 59,
+     "execution_count": 65,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -3310,17 +3178,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 73,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 66,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 268 ms, sys: 4 ms, total: 272 ms\n",
-      "Wall time: 272 ms\n"
+      "CPU times: user 296 ms, sys: 4 ms, total: 300 ms\n",
+      "Wall time: 299 ms\n"
      ]
     },
     {
@@ -3329,7 +3195,7 @@
        "14"
       ]
      },
-     "execution_count": 73,
+     "execution_count": 66,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -3340,17 +3206,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 74,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 67,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 64 ms, sys: 0 ns, total: 64 ms\n",
-      "Wall time: 64.1 ms\n"
+      "CPU times: user 36 ms, sys: 0 ns, total: 36 ms\n",
+      "Wall time: 34.5 ms\n"
      ]
     },
     {
@@ -3359,7 +3223,7 @@
        "14"
       ]
      },
-     "execution_count": 74,
+     "execution_count": 67,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -3368,6 +3232,133 @@
     "%time len(astar_search_closed('imps', 'pros'))"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": 90,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "bash bush True\n",
+      "rush bush True\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "2"
+      ]
+     },
+     "execution_count": 90,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "nb_count = collections.Counter()\n",
+    "for w in neighbours['rash']:\n",
+    "    for w2 in neighbours[w]:\n",
+    "        if w2 == 'bush': print(w, w2, w2 not in neighbours['rash'])\n",
+    "        if w2 != 'rash' and w2 not in neighbours['rash']:\n",
+    "            nb_count.update([w2])\n",
+    "nb_count.most_common(1)[0][1]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 91,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['gush', 'hush', 'lush', 'mush', 'push', 'tush', 'bosh']"
+      ]
+     },
+     "execution_count": 91,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "[w for w in neighbours['bush'] if w in nb_count]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 89,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "('gibe', 2)"
+      ]
+     },
+     "execution_count": 89,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "best_start = ''\n",
+    "best_overlap_count = 0\n",
+    "for w0 in neighbours:    \n",
+    "    nb_count = collections.Counter()\n",
+    "    for w in neighbours[w0]:\n",
+    "        for w2 in neighbours[w]:\n",
+    "            if w2 != w0 and w2 not in neighbours[w0]:\n",
+    "                nb_count.update([w2])\n",
+    "    if len(nb_count) > 0:\n",
+    "        if nb_count.most_common(1)[0][1] > best_overlap_count:\n",
+    "            best_start = w0\n",
+    "            best_overlap_count = nb_count.most_common(1)[0][1]\n",
+    "        \n",
+    "best_start, best_overlap_count"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 88,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'memo'"
+      ]
+     },
+     "execution_count": 88,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "w0"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 76,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'bash', 'rush'}"
+      ]
+     },
+     "execution_count": 76,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "set(neighbours['rash']) & set(neighbours['bush'])"
+   ]
+  },
   {
    "cell_type": "code",
    "execution_count": null,
@@ -3394,7 +3385,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.5.2"
+   "version": "3.5.2+"
   }
  },
  "nbformat": 4,