Updated README, moved Hangman files into a separate directory
[cas-master-teacher-training.git] / hangman-both.ipynb
diff --git a/hangman-both.ipynb b/hangman-both.ipynb
deleted file mode 100644 (file)
index d9e565b..0000000
+++ /dev/null
@@ -1,1186 +0,0 @@
-{
- "metadata": {
-  "name": "",
-  "signature": "sha256:5e9f030b42097ebbcce2654cdb1d9370fde38b61bdbfa85a0cc700e76d5a8a71"
- },
- "nbformat": 3,
- "nbformat_minor": 0,
- "worksheets": [
-  {
-   "cells": [
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "import re\n",
-      "import random\n",
-      "import string\n",
-      "import collections"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 71
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "WORDS = [w.strip() for w in open('/usr/share/dict/british-english').readlines() \n",
-      "         if re.match(r'^[a-z]*$', w.strip())]"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 72
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "STARTING_LIVES = 10"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 73
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "class Game:\n",
-      "    def __init__(self, target, player=None, lives=STARTING_LIVES):\n",
-      "        self.lives = lives\n",
-      "        self.player = player\n",
-      "        self.target = target\n",
-      "        self.discovered = list('_' * len(target))\n",
-      "        self.wrong_letters = []\n",
-      "        self.game_finished = False\n",
-      "        self.game_won = False\n",
-      "        self.game_lost = False\n",
-      "    \n",
-      "    def find_all(self, letter):\n",
-      "        return [p for p, l in enumerate(self.target) if l == letter]\n",
-      "    \n",
-      "    def update_discovered_word(self, guessed_letter):\n",
-      "        locations = self.find_all(guessed_letter)\n",
-      "        for location in locations:\n",
-      "            self.discovered[location] = guessed_letter\n",
-      "        return self.discovered\n",
-      "    \n",
-      "    def do_turn(self):\n",
-      "        if self.player:\n",
-      "            guess = self.player.guess(self.discovered, self.wrong_letters, self.lives)\n",
-      "        else:\n",
-      "            guess = self.ask_for_guess()\n",
-      "        if guess in self.target:\n",
-      "            self.update_discovered_word(guess)\n",
-      "        else:\n",
-      "            self.lives -= 1\n",
-      "            if guess not in self.wrong_letters:\n",
-      "                self.wrong_letters += [guess]\n",
-      "        if self.lives == 0:\n",
-      "            self.game_finished = True\n",
-      "            self.game_lost = True\n",
-      "        if '_' not in self.discovered:\n",
-      "            self.game_finished = True\n",
-      "            self.game_won = True\n",
-      "            \n",
-      "    def ask_for_guess(self):\n",
-      "        print('Word:', ' '.join(self.discovered), \n",
-      "              ' : Lives =', self.lives, \n",
-      "              ', wrong guesses:', ' '.join(sorted(self.wrong_letters)))\n",
-      "        guess = input('Enter letter: ').strip().lower()[0]\n",
-      "        return guess\n",
-      "    \n",
-      "    def play_game(self):\n",
-      "        self.do_turn()\n",
-      "        while not self.game_finished:\n",
-      "            self.do_turn()\n",
-      "        if not self.player:\n",
-      "            self.report_on_game()\n",
-      "        return self.game_won\n",
-      "    \n",
-      "    def report_on_game(self):\n",
-      "        if self.game_won:\n",
-      "            print('You won! The word was', self.target)\n",
-      "        else:\n",
-      "            print('You lost. The word was', self.target)\n",
-      "        return self.game_won"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 74
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS))"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 75
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.target"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 76,
-       "text": [
-        "'strife'"
-       ]
-      }
-     ],
-     "prompt_number": 76
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.discovered"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 77,
-       "text": [
-        "['_', '_', '_', '_', '_', '_']"
-       ]
-      }
-     ],
-     "prompt_number": 77
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.do_turn()"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ _ _  : Lives = 10 , wrong guesses: \n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: e\n"
-       ]
-      }
-     ],
-     "prompt_number": 78
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.lives"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 79,
-       "text": [
-        "10"
-       ]
-      }
-     ],
-     "prompt_number": 79
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.wrong_letters"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 80,
-       "text": [
-        "[]"
-       ]
-      }
-     ],
-     "prompt_number": 80
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.do_turn()"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ _ e  : Lives = 10 , wrong guesses: \n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: d\n"
-       ]
-      }
-     ],
-     "prompt_number": 81
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.lives"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 82,
-       "text": [
-        "9"
-       ]
-      }
-     ],
-     "prompt_number": 82
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.discovered"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 83,
-       "text": [
-        "['_', '_', '_', '_', '_', 'e']"
-       ]
-      }
-     ],
-     "prompt_number": 83
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.wrong_letters"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 84,
-       "text": [
-        "['d']"
-       ]
-      }
-     ],
-     "prompt_number": 84
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS))\n",
-      "g.play_game()"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ _ _ _  : Lives = 10 , wrong guesses: \n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: d\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ _ _ d  : Lives = 10 , wrong guesses: \n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: e\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ e _ _ _ e d  : Lives = 10 , wrong guesses: \n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: f\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ e _ _ _ e d  : Lives = 9 , wrong guesses: f\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: e\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ e _ _ _ e d  : Lives = 9 , wrong guesses: f\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: s\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ e _ _ _ e d  : Lives = 8 , wrong guesses: f s\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: t\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ e _ _ _ e d  : Lives = 7 , wrong guesses: f s t\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: n\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ e _ _ _ e d  : Lives = 6 , wrong guesses: f n s t\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: m\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ e _ _ _ e d  : Lives = 5 , wrong guesses: f m n s t\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: h\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ e _ _ _ e d  : Lives = 4 , wrong guesses: f h m n s t\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: o\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ e _ _ _ e d  : Lives = 3 , wrong guesses: f h m n o s t\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: i\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ e _ i _ e d  : Lives = 3 , wrong guesses: f h m n o s t\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: r\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: r e _ i r e d  : Lives = 3 , wrong guesses: f h m n o s t\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: w\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "You won! The word was rewired\n"
-       ]
-      },
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 85,
-       "text": [
-        "True"
-       ]
-      }
-     ],
-     "prompt_number": 85
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS))\n",
-      "g.play_game()"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ _  : Lives = 10 , wrong guesses: \n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: e\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ _  : Lives = 9 , wrong guesses: e\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: s\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ s  : Lives = 9 , wrong guesses: e\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: t\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ s  : Lives = 8 , wrong guesses: e t\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: o\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ s  : Lives = 7 , wrong guesses: e o t\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: i\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ s  : Lives = 6 , wrong guesses: e i o t\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: u\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ s  : Lives = 5 , wrong guesses: e i o t u\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: a\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ _ _ _ s  : Lives = 4 , wrong guesses: a e i o t u\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: y\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ y _ _ s  : Lives = 4 , wrong guesses: a e i o t u\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: w\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: _ y _ _ s  : Lives = 3 , wrong guesses: a e i o t u w\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: h\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: h y _ _ s  : Lives = 3 , wrong guesses: a e i o t u w\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: m\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Word: h y m _ s  : Lives = 3 , wrong guesses: a e i o t u w\n"
-       ]
-      },
-      {
-       "name": "stdout",
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Enter letter: n\n"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "You won! The word was hymns\n"
-       ]
-      },
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 86,
-       "text": [
-        "True"
-       ]
-      }
-     ],
-     "prompt_number": 86
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.target"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 108,
-       "text": [
-        "'six'"
-       ]
-      }
-     ],
-     "prompt_number": 108
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "class PlayerAlphabetical:\n",
-      "    def guess(self, discovered, missed, lives):\n",
-      "        guessed_letters = [l.lower() for l in discovered + missed if l in string.ascii_letters]\n",
-      "        return [l for l in string.ascii_lowercase if l not in guessed_letters][0]"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 109
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS), player=PlayerAlphabetical())"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 110
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.play_game()"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 111,
-       "text": [
-        "False"
-       ]
-      }
-     ],
-     "prompt_number": 111
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.discovered"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 112,
-       "text": [
-        "['l', 'e', 'g', 'a', 'l', 'l', '_']"
-       ]
-      }
-     ],
-     "prompt_number": 112
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g.target"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 113,
-       "text": [
-        "'legally'"
-       ]
-      }
-     ],
-     "prompt_number": 113
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS), player=PlayerAlphabetical())\n",
-      "g.play_game()\n",
-      "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Target: cavalry ; Discovered: ['c', 'a', '_', 'a', 'l', '_', '_'] ; Lives remaining: 0\n"
-       ]
-      }
-     ],
-     "prompt_number": 114
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "LETTER_COUNTS = collections.Counter(l.lower() for l in open('sherlock-holmes.txt').read() if l in string.ascii_letters)\n",
-      "LETTERS_IN_ORDER = [p[0] for p in LETTER_COUNTS.most_common()]\n",
-      "\n",
-      "class PlayerFreqOrdered:\n",
-      "    def guess(self, discovered, missed, lives):\n",
-      "        guessed_letters = [l.lower() for l in discovered + missed if l in string.ascii_letters]\n",
-      "        return [l for l in LETTERS_IN_ORDER if l not in guessed_letters][0]"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 115
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
-      "g.play_game()\n",
-      "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Target: deathblow ; Discovered: ['d', 'e', 'a', 't', 'h', '_', 'l', 'o', 'w'] ; Lives remaining: 0\n"
-       ]
-      }
-     ],
-     "prompt_number": 116
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
-      "g.play_game()\n",
-      "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Target: littered ; Discovered: ['l', 'i', 't', 't', 'e', 'r', 'e', 'd'] ; Lives remaining: 5\n"
-       ]
-      }
-     ],
-     "prompt_number": 117
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
-      "g.play_game()\n",
-      "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Target: licenced ; Discovered: ['l', 'i', 'c', 'e', 'n', 'c', 'e', 'd'] ; Lives remaining: 1\n"
-       ]
-      }
-     ],
-     "prompt_number": 118
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "class PlayerFixedOrder:\n",
-      "    def __init__(self, ordered_letters):\n",
-      "        self.ordered_letters = ordered_letters\n",
-      "        \n",
-      "    def guess(self, discovered, missed, lives):\n",
-      "        guessed_letters = [l.lower() for l in discovered + missed if l in string.ascii_letters]\n",
-      "        return [l for l in self.ordered_letters if l not in guessed_letters][0]"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 119
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "class PlayerAlphabetical(PlayerFixedOrder):\n",
-      "    def __init__(self):\n",
-      "        super().__init__(string.ascii_lowercase)\n",
-      "\n",
-      "class PlayerFreqOrdered(PlayerFixedOrder):\n",
-      "    def __init__(self):\n",
-      "        super().__init__(LETTERS_IN_ORDER)\n"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 120
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
-      "g.play_game()\n",
-      "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Target: unworthier ; Discovered: ['u', 'n', 'w', 'o', 'r', 't', 'h', 'i', 'e', 'r'] ; Lives remaining: 5\n"
-       ]
-      }
-     ],
-     "prompt_number": 121
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
-      "g.play_game()\n",
-      "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Target: kneel ; Discovered: ['_', 'n', 'e', 'e', 'l'] ; Lives remaining: 0\n"
-       ]
-      }
-     ],
-     "prompt_number": 122
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS), player=PlayerAlphabetical())\n",
-      "g.play_game()\n",
-      "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Target: provisoes ; Discovered: ['_', '_', '_', '_', 'i', '_', '_', 'e', '_'] ; Lives remaining: 0\n"
-       ]
-      }
-     ],
-     "prompt_number": 123
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS), player=PlayerFixedOrder(list(reversed(string.ascii_lowercase))))\n",
-      "g.play_game()\n",
-      "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Target: invincible ; Discovered: ['_', '_', 'v', '_', '_', '_', '_', '_', '_', '_'] ; Lives remaining: 0\n"
-       ]
-      }
-     ],
-     "prompt_number": 124
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "g = Game(random.choice(WORDS), player=PlayerFixedOrder(list(reversed(string.ascii_lowercase))))\n",
-      "g.play_game()\n",
-      "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Target: clogging ; Discovered: ['_', '_', '_', '_', '_', '_', '_', '_'] ; Lives remaining: 0\n"
-       ]
-      }
-     ],
-     "prompt_number": 125
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "wins = 0\n",
-      "for _ in range(1000):\n",
-      "    g = Game(random.choice(WORDS), player=PlayerAlphabetical())\n",
-      "    g.play_game()\n",
-      "    if g.game_won:\n",
-      "        wins += 1\n",
-      "print(wins)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "44\n"
-       ]
-      }
-     ],
-     "prompt_number": 126
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "wins = 0\n",
-      "for _ in range(1000):\n",
-      "    g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
-      "    g.play_game()\n",
-      "    if g.game_won:\n",
-      "        wins += 1\n",
-      "print(wins)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "320\n"
-       ]
-      }
-     ],
-     "prompt_number": 127
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "wins = 0\n",
-      "for _ in range(1000):\n",
-      "    g = Game(random.choice(WORDS), player=PlayerFixedOrder(list(reversed(string.ascii_lowercase))))\n",
-      "    g.play_game()\n",
-      "    if g.game_won:\n",
-      "        wins += 1\n",
-      "print(wins)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "7\n"
-       ]
-      }
-     ],
-     "prompt_number": 128
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 128
-    }
-   ],
-   "metadata": {}
-  }
- ]
-}
\ No newline at end of file