{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Gesture Typing \n", "===\n", "\n", "Typing quickly and accurately on a smartphone screen is hard! One invention to make it easier is **gesture typing**, in which your finger can trace a **path** consisting of letter-to-letter **segments**. When you lift your finger the path (and the word) is complete. Below we see the path for the word \"hello.\" Note that the path is imprecise; it didn't quite hit the \"L\", but the word was recognized anyways, because \"Hello\" is a known word, whereas \"Hekko\", \"Hwerklo\", etc., are not.\n", "\n", "\n", "\n", "Questions About Gesture Typing\n", "===\n", "\n", "My colleague Nicolas Schank examined (and answered) the question of what word has the longest path length. I mentioned this to [Shumin Zhai](http://www.shuminzhai.com/), the pioneer of gesture typing, and between the three of us we expanded the list of questions:\n", "\n", " 1. What words have the longest path length?\n", " 2. What words have the highest ratio of path length to word length? \n", " 3. What is the average segment length, over a typical typing work load?\n", " 3. Is there a better keyboard layout to minimize the average segment length over a work load?\n", " 4. How often are two words confused because they have similar paths?\n", " 5. Is there a better keyboard layout to minimize confusion? \n", " 6. Is there a better keyboard layout to maximize overall user satisfaction?\n", "\n", "Let's look at each of these questions, but first, let's get a rough idea for of the concepts we will need to model.\n", "\n", "Vocabulary\n", "===\n", "\n", "We will need to talk about the following concepts:\n", "\n", "* **Keyboard**: We'll need to know the **location** of each letter on the keyboard (we consider only letters, not the other symbols).\n", "* **Location**: A location is a **point** in two-dimensional space (we assume keyboards are flat).\n", "* **Path**: A path connects the letters in a word. In the picture above the path is curved, but a shortest path is formed by connecting straight line **segments**, so maybe we need only deal with straight lines.\n", "* **Segment**: A line segment is a straight line between two points.\n", "* **Length**: Paths and Segments have lengths; the distance traveled along them.\n", "* **Words**: We will need a list of allowable words (in order to find the one with the longest path).\n", "* **Work Load**: If we want to find the average path length over a typical work load, we'll have to represent a work load: not\n", "just a list of words, but a measure of how frequent each word (or each segment) is.\n", "* **Confusion**: We need some measure of *whether* (or perhaps *to what degree*) the paths for two words can be confused with each other.\n", "* **Satisfaction**: This is a very difficult concept to define. A user will be more satisfied with a keyboard if it allows for fast, accurate typing, and if it gives the user a feeling of mastery, not frustration.\n", "\n", "**Note**: Before we get started writing any real code, I've taken all the `import`s I will need throughout this notebook and gathered them together here:\n", "\n", "\n", " " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from collections import Counter\n", "from statistics import mean\n", "import matplotlib.pyplot as plt\n", "import urllib\n", "import itertools\n", "import random \n", "import re" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Representing Keyboards and Points\n", "===\n", "\n", "The representation for a keyboard needs to describe the location of each of the letters. Using the principle of *\"Do the simplest thing that could possibly work,\"* I represent a keyboard as a `dict` of `{letter: point}` pairs, where there will be 26 letters, A-Z,\n", "and each point will mark the x-y coordinates of the center of the corresponding key. In a standard keyboard the letters are not all on a strict rectangular grid; the **A** key is half way between the **Q** and **W** in the horizontal direction. I would like to have a programmer-friendly way of defining keyboard layouts. For example, a programmer should be able to write:\n", "\n", " Keyboard(('Q W E R T Y U I O P',\n", " ' A S D F G H J K L ',\n", " ' Z X C V B N M '))\n", " \n", "and this would be equivalent to the `dict`:\n", "\n", " {'Q': Point(0, 0), 'W': Point(1, 0), ...\n", " 'A': Point(0.5, 1), 'S': Point(1.5, 1), ...\n", " 'Z': Point(1.5, 2), 'X': Point(2.5, 2), ...}\n", " \n", "Note that one key width is two characters in the input to `Keyboard`. Here is the implementation:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def Keyboard(rows):\n", " \"A keyboard is a {letter: location} map, e.g. {'Q':Point(0, 0), 'A': Point(0.5, 1)}.\"\n", " return {ch: Point(x/2, y) \n", " for (y, row) in enumerate(rows)\n", " for (x, ch) in enumerate(row)\n", " if ch != ' '}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What about `Point`? At first glance, Python does not appear to have a two-dimensional point as a builtin data type, but\n", "on second thought, it does: `complex`. A complex number is a point in the two-dimensional complex plane;\n", "we can use that to model the two-dimensional (x, y) plane. Because complex numbers are built in, manipulating them will be efficient. A bonus is that the distance between points `A` and `B` is simply `abs(A-B)`; easier than the usual formula involving squares and a square root. Thus, the simplest possible thing I could do to represent points is\n", "\n", "
\n",
    "Point = complex\n",
    "
\n", "\n", "That would work fine. However, I would like to refer to the x coordinate of point `p` as `p.x` rather than `p.real`, and I would like points to display nicely, so I will do the second-simplest thing: make `Point` be a subclass of `complex` with `x` and `y` properties and a `__repr__` method:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class Point(complex):\n", " \"A point in the (x, y) plane.\"\n", " def __repr__(self): return 'Point({}, {})'.format(self.x, self.y)\n", " x = property(lambda p: p.real)\n", " y = property(lambda p: p.imag)\n", " \n", "def distance(A, B):\n", " \"The distance between two points.\"\n", " return abs(A - B)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternative representations for points include an `(x, y)` tuple or namedtuple, or a NumPy two-element array, or a class. \n", "\n", "Alternatives for `Keyboard` include a subclass of `dict`, or a class that contains a `dict`. \n", "\n", "\n", "Now we can check that `Keyboard` works:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'A': Point(0.5, 1.0),\n", " 'B': Point(5.5, 2.0),\n", " 'C': Point(3.5, 2.0),\n", " 'D': Point(2.5, 1.0),\n", " 'E': Point(2.0, 0.0),\n", " 'F': Point(3.5, 1.0),\n", " 'G': Point(4.5, 1.0),\n", " 'H': Point(5.5, 1.0),\n", " 'I': Point(7.0, 0.0),\n", " 'J': Point(6.5, 1.0),\n", " 'K': Point(7.5, 1.0),\n", " 'L': Point(8.5, 1.0),\n", " 'M': Point(7.5, 2.0),\n", " 'N': Point(6.5, 2.0),\n", " 'O': Point(8.0, 0.0),\n", " 'P': Point(9.0, 0.0),\n", " 'Q': Point(0.0, 0.0),\n", " 'R': Point(3.0, 0.0),\n", " 'S': Point(1.5, 1.0),\n", " 'T': Point(4.0, 0.0),\n", " 'U': Point(6.0, 0.0),\n", " 'V': Point(4.5, 2.0),\n", " 'W': Point(1.0, 0.0),\n", " 'X': Point(2.5, 2.0),\n", " 'Y': Point(5.0, 0.0),\n", " 'Z': Point(1.5, 2.0)}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qwerty = Keyboard(('Q W E R T Y U I O P',\n", " ' A S D F G H J K L ',\n", " ' Z X C V B N M '))\n", "qwerty" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Computing Path Length\n", "===\n", "\n", "Now let's figure out the path length for a word: the sum of the lengths of segments between letters. So the path length for `'WORD'` would be the sum of the segment lengths for `'WO'` plus `'OR'` plus `'RD'`:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "13.118033988749895" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "W, O, R, D = qwerty['W'], qwerty['O'], qwerty['R'], qwerty['D'], \n", "distance(W, O) + distance(O, R) + distance(R, D)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's make a function to compute this:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def path_length(word, kbd=qwerty):\n", " \"The total path length for a word on this keyboard: the sum of the segment lengths.\"\n", " return sum(distance(kbd[word[i]], kbd[word[i+1]])\n", " for i in range(len(word)-1))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "13.118033988749895" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "path_length('WORD')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's check with a simpler example that we know the answer to:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4.0" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "path_length('TO')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That makes it clearer—the **O** is four keys to the right of the **T**, on the same row, so the distance between them is 4.\n", "\n", "Here's another one that you can verify on your own:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "path_length('TYPEWRITER') == 1 + 4 + 7 + 1 + 2 + 4 + 3 + 2 + 1 == 25" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Question 1: Longest Path Length?\n", "===\n", "\n", "To know what the longest word is, we'll have to know what the allowable words are. The so-called TWL06 word list gives all the words that are legal in the game of Scrabble; that seems like a reasonable list (although it omits proper nouns). Here's how to load a copy:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "! [ -e TWL06.txt ] || curl -O http://norvig.com/ngrams/TWL06.txt\n", " \n", "WORDS = set(open('TWL06.txt').read().split())" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "178691" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(WORDS)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's a lot of words; which one has the longest path?" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'PALEOMAGNETISMS'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "max(WORDS, key=path_length)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the ten longest paths? Including the lengths? We'll use a helper function, `print_top`, which prints the top *n* items in a seqence according to some key function:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "72.2 PALEOMAGNETISMS\n", "70.0 ANTIQUARIANISMS\n", "69.9 ELECTROANALYSIS\n", "69.9 ANTIAPHRODISIAC\n", "69.3 PARLIAMENTARIAN\n", "68.9 BLEPHAROSPASMS\n", "68.6 BIDIALECTALISMS\n", "67.6 PALEOGEOGRAPHIC\n", "67.6 SPERMATOZOANS\n", "67.1 APOCALYPTICISMS\n" ] } ], "source": [ "def print_top(n, sequence, key=None, formatter='{:.1f} {}'.format):\n", " \"Find the top n elements of sequence as ranked by key function, and print them.\"\n", " for x in sorted(sequence, key=key, reverse=True)[:n]:\n", " print(formatter(key(x), x))\n", " \n", "print_top(10, WORDS, path_length)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Question 2: Highest Path Length to Word Length Ratio?\n", "===\n", "\n", "Very long words tend to have long path lengths. But what words have the highest *ratio*\n", "of path length to word length? (I decided to measure word length by number of letters; an alternative is number of segments.) " ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def path_length_ratio(word, kbd=qwerty): return path_length(word, kbd) / len(word)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6.9 PALAPA\n", "6.7 PAPAL\n", "6.4 PAPA\n", "6.4 JALAPS\n", "6.2 SLAPS\n", "6.2 KAMALA\n", "6.2 LAPELS\n", "6.2 PAPS\n", "6.2 HALALA\n", "6.1 SPALE\n" ] } ], "source": [ "print_top(10, WORDS, path_length_ratio)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Question 3: Average Segment Length on Work Load?\n", "===\n", "\n", "What is the average segment length for a typical typing work load? To answer that, we need to know what a typical work load is. We will read a file of \"typical\" text, and count how many times each segment is used. A `Workload` is a `dict` of the form `{segment: proportion, ...},` e.g. `{'AB': 0.02}`, where each key is a two-letter string (or *bigram*) representing a segment, and each value is the proportion of time that segment appears in the workload. Since the distance from `A` to `B` on a keyboard is the same as the distance from `B` to `A`, we can combine them together into one count;\n", "I'll arbitrarily choose count them both under the alphabetically first one. I make a `Counter` of all two-letter segments, and `normalize` it so that the counts sum to 1 (and are thus probabilities)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def Workload(text):\n", " \"\"\"Create a Workload--a dict of the form {'AB': 1000, ...} \n", " saying how often each letter pair occurs in text.\"\"\"\n", " segments = (min(AB, AB[::-1]) for AB in bigrams(text))\n", " return normalize(Counter(segments))\n", "\n", "def bigrams(text): return re.findall(r'(?=([A-Z][A-Z]))', text)\n", "\n", "def normalize(dictionary):\n", " \"Normalize a {key: val} dict so that the sum of the vals is 1.0.\"\n", " total = sum(dictionary.values())\n", " for k in dictionary:\n", " dictionary[k] /= total\n", " return dictionary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Note:* Some `re` trickiness here: `([A-Z][A-Z])` means a group of two consecutive letters. But if I only looked for that, then in the text `'FOUR'` I would find `['FO', 'UR']`. So I use the `?=` operator, which says to check for a match, but don't consume the matched characters. So I can find `['FO', 'OU', 'UR']`, which is what I want.\n", "\n", "Let's see what a workload looks like for a tiny text:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Counter({'AL': 0.05,\n", " 'AO': 0.05,\n", " 'DO': 0.05,\n", " 'GO': 0.1,\n", " 'HO': 0.05,\n", " 'HS': 0.05,\n", " 'IS': 0.05,\n", " 'OO': 0.55,\n", " 'OT': 0.05})" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Workload('SHOT IS GOOD -- GOOOOOOOOOOOAL!')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I happened to have a file of about a megabyte of random text, `smaller.txt`; that should work fine as a typical work load:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "! [ -e smaller.txt ] || curl -O http://norvig.com/ngrams/smaller.txt\n", " \n", "WORKLOAD = Workload(open('smaller.txt').read().upper())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's peek at the most common segments:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[('HT', 0.04144819308354474),\n", " ('ER', 0.04050225926898767),\n", " ('EH', 0.03576926529702987),\n", " ('IN', 0.02699818128015268),\n", " ('AN', 0.02320447132440709),\n", " ('NO', 0.022344984888333263),\n", " ('EN', 0.021994208025641622),\n", " ('IT', 0.021467211506811055),\n", " ('ES', 0.020667573255841017),\n", " ('DE', 0.020619362217840744)]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "WORKLOAD.most_common(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The most popular segments, at about 4% each are `HT/TH` and `ER/RE`. Now we can compute the workload average:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def workload_average(kbd, workload=WORKLOAD):\n", " \"The average segment length over a workload of segments.\"\n", " return sum(distance(kbd[A], kbd[B]) * workload[A+B]\n", " for (A, B) in workload)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.2333097802127653" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "workload_average(qwerty)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, on average, your finger has to travel a little over 3 keys from one letter to the next over a typical workload." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Aside: Visualizing a Keyboard\n", "---\n", "\n", "We'll need a way of visualizing what a keyboard looks like. I could just `print` letters, but I think it is more compelling to use IPython's `matplotlib` module. In the function `show_kbd` we'll draw a square around the center point of each key, and annotate the square with the key letter. " ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def show_kbd(kbd, name='keyboard'):\n", " \"Plot the keyboard and show title/stats.\"\n", " for L in kbd:\n", " plot_square(kbd[L].x, -kbd[L].y, label=L)\n", " plt.axis('equal'); plt.axis('off')\n", " plt.title(title(kbd, name));\n", " plt.show()\n", "\n", "def plot_square(x, y, label='', style='k:'):\n", " \"Plot a square with center (x, y) and optional label.\"\n", " H = 1/2\n", " plt.plot([x-H, x+H, x+H, x-H, x-H], \n", " [y-H, y-H, y+H, y+H, y-H], style) \n", " plt.annotate(label, (x-H/4, y-H/4)) # H/4 seems to place label well.\n", " \n", "def title(kbd, name): \n", " X, Y = span(kbd[L].x for L in kbd), span(kbd[L].y for L in kbd)\n", " return ('{}: size: {:.1f}×{:.1f}; path length: {:.1f}'\n", " .format(name, X, Y, workload_average(kbd)))\n", " \n", "def span(numbers):\n", " numbers = list(numbers)\n", " return max(numbers) - min(numbers)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAEKCAYAAAAGvn7fAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGh1JREFUeJzt3Xu0JHV57vHvw3C/yEWIC7lFxFkkgDJzFFFEWjhogOQI\nMaCYBBVRTLxMAoZEWeqQo0YwXBSBeDSyxKWACYiId8EWZLwdBxQwRgn3ERCYAcYZg8zMmz/q10zR\nTO+pqt1dvfu3n89avWZXd3U91benq9/dbBQRmJlZPjYY9w6YmdlwudjNzDLjYjczy4yL3cwsMy52\nM7PMuNjNzDLjYrd1knSzpJeOez+sIOkgSXfXWP/bko4f5T5Nkb1G0u7jyLaCi33CtPWiiYi9I+La\nUWZIerGkH0h6VNKNkg5Yz/qnS3pQ0gOSPtQgbwdJn5O0RNIySddJ2m+UmU0NeJxn3H90MuANpPF+\nSnq1pJ9LekTSfZIulLTlgHWfI+kKSb9Oj9FXJc1tmp0TF/uEkDQn/TjjXtxNSNoWuBI4Hdga+DDw\nJUlbD1j/ROD/APsAzwX+RNKbS5dvJGmvdVxvXmlxS+CHwDxgO+Ai4MuSNm+SOWKT/DhrGte9Hnhp\nRGwN7A5sBLx/wLrbAF8E5gLPAH6Uli0ifGpwoiiHHwOPAJcAFwP/mC7rAkelnw8A1gCHpeWDgRtK\n2zke+BnwEPBVYNfSZWuAvwZ+AfwX8J103m+AR4FjgJuAI0rX2RB4AHhehdvwdOBLwLKU/53SZbcD\nB6efl6W8R1P2mt5+An8M3JDW+S6wT8X77wjg5r7z/hN4w4D1rwdOKC2/AVhUWt4fuB/Yt3TeMcCv\ngB2m2I9HgHkNM78EnDLgurul++lNwJJ0Orl0+QuARel+WwKcC2yYLut/nI8GDgLuBk5Kt3MJ8Pop\nbte3geNrPM9OTM+zpcDHSpdtAJyZnlP/Bbw1rb8BReGuAlam/fzo+rZX8zW2JfBp4KqK62+bsrdt\nqwdm6mnsOzCJJ4qjiDuAdwBzgFcBv2NtsZ8GfCT9/C7gl8A/lS47O/38yvTkn5teKO8Gri/lrAG+\nTnFksknpvGeV1nkncElp+ZXAT0rLPwFeM+B2fBA4P2XPAQ4oXfZEsfdd5wOpNOZQvLndDzyf4ijt\nL9P1NkrrnjfoRc26i/0XwJkD1n8YeEFpeT7wSN86vSL/A+BPgPuA507xOO6bSmmrpplTbLtX7J8F\nNgX2Bn7N2jfL+cB+6X7bFbgFeEffY19+nA8CHgfel+77w4AVwNYD8p8o9orPsyuBrYBd0n6+PF32\nFuBmYEeKT1bfBFYDG/TnVNzeLhRlv/MU990B6b5fAywHDql4nx8JLBlHJ8y009h3YBJPwIHAPX3n\nXc/aYj8YuDH9/FWKo6VFabkLHJl+/gqlI9T0olsB7JKW1wAH9eWsAXYvLe9IcdS5ZVr+N+CdFW/H\nacAXgGev47KnFDvwauA2YLu0fD5wWt86PwcOrJC9HcXR4zEUnzJelwrjggHrrwLmlpb3AFavY73X\nURT6r4H9psh/GvBTBhxx18kccN1esT+ndN7pwCcGrL8AuGyKx/mg9NzYoHTe/YNuI08u9irPsxeV\nLr+0d78AVwNvKl12CNWKfZ3bq/k62xF4b/k+nGLdnYF7gGPq5uR48oy9mWdSfBQuu7P08/eAuZJ+\nD3gexSx3F0lPpzhK+05abzfgI5KWSlpKUXQB7FTa1j1T7UhE3EvxpvKqNJ8+jOIosYozKD5ef0PS\nrZL+ftCKaVZ9LsWb0tLS/p/c239JyyheYM9cX3DaxpEUnzjuA15OcTQ46Pb+hqKMe7ZO5/W7HdiE\n4kj8vgG3ZVOKI8pFEXHGFLtZNXOQ4Mm3507SfZN+8fclSfdKepjik9D269neQxGxprS8kmJcsT5V\nnmf3D9juMylGQD1Vv5kzaHuVpef21ylGnQNJ2iGt97GI+HzdnBy52Ju5lye/KKD4OA1ARPyWYv6+\ngGLcsIqi7E8Cbo2IZWnVu4ATI2K7dNo2IraMiO+XthsV9uciijHI0RRldW+VGxERKyLinRHxbIpf\nEp4k6WX966U3qC8AfxURPy1ddDfwgXXs/6UV86+LiP0iYnvgOIoRyg8HrH4LxZtkz77pvPJ+vhD4\nd4rR2FnA1ZJ27FtnY+AK4K6IeMt6dnG9meshitFDz64UoyKAC4D/oPi0tA1wKtP7peNU7mb9z7NB\n7qV4s+7Zte/yKs/P6diI4peo6yRpG4pSvyIiWvvW0kznYm/me8AqSW+XtKGkP6U4Ei+7Fngba4/O\nu33LAB8H3i3pDwEkbS3pz9aTfR9PfaJfQTGzfQdFyVci6QhJz06LyylGD6v71plDUZafiYjL+jbx\nCeAtva8MStpC0uGStqiYv2+6/55G8Qu6uyLimwNWv4jijeeZknaieJO8sLStvSi+EfH6iLgmIj4K\n/CvwrfQNHCRtCFxGcQT5+gq7uL7Mb0t673q28R5Jm6X9ewNrjz63Ah6NiJWS9gT+qu9663qcm/oX\n6j/Pej4PLEj3wTbAKX2X3z/E/UTSayXtkn7ejeIXtN8asO5WwDeA70bEqcPahyyMexY0qSeKIl1M\nMd++mNK3YtLlL6coyQPT8l5p+c/6tvPnFLPehyk+qn+ydNlqSnPWdN6bKY76lpa3RVGyy4HN+9a/\nGTh2wG34G4rRxXKKTw/vLl12G8XvCnZL+7Gc4psPvX93Lt3OH6b9WUIxT90iXXYBcP4U9+Hn0u1e\nlu6/7UuXvYSi+Mrrf4hijPAg6ZfRpcu2AV6xjoyjWTsPfmm6Lb9Jt6N3Ww5omHkr6/gFc7qsN2M/\nId0vv+LJ34o5kOKI/VGKN/uFwLWDHmeKGftdfRm3TZF/DU/+Vkzl5xnwKdb+vmgOxZvugxRjuwXA\nY6V196f4NtNDwDkDtndhaXu7lJ8/69jv91N8wug9Jy+g9C0Xit8X/EP6+TjWPjfLj+fAX8zOlpPS\nHWTTJOlC4O6IWN8R3Kjy30PxS6bjxpE/26Qj+Esj4iUDLt+Nong3iifPxSeapD+i+AX3s8a9LzaY\nRzEZkLQd8EaK0Y61ICKWDCr1klHNzFsjaVNJh0mak97M3gdcPu79sqm52IdnLB99JJ1A8ZH1yxFx\n/Tj2wQbK4eOwKL4Wu5TiCwG3UJS7zWAexZiZZcZH7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGx\nm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc\n7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZ\nF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5ll\nxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZm\nmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZ\nWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsXe\nR9LC8s8tLHczz1vYZk7Lt63rPOc1WR65iPCpdAIWOm8yT7nfl86b7Lw2T0o30GwkJC2MiIW5ZZnN\nZB7FjFmrH8/GkAd0Ws5rTe6PnfMmN8/F3mcWFF/bed2W89rUcZ7zZiIX+/h1c87LfDTSdZ7zqmrz\nteAZu42UZ+xm7fMR+5jlPOdLOi3ntSb3x855k5vnYu8zC4qv7bxuy3lt6jjPeTORi338ujnnZT4a\n6TrPeVV5xj5BJO0EnAf8IcUb5VeAkyPi8SHnnAXcEREfTctfA+6KiDen5X8G7omIc4aYuRr4CSAg\ngEsi4oya26g89y7lbQTcBvxlRDw6oqztgKspbteOwGrggbS8X0SsqppbY/+uAz4QEV9Ly0cDb4iI\nw4edlba/G3BVROxTOu99wPKIOGsEecsjYqthb3eKvPJrT8BVwN+N6LErPzd/BrwuIv572DnD4iP2\n6bscuDwi5gLPATYHPlz1yjVGP9cDL07XEbA9sFfp8hcDi4aYB7AiIuZHxLz0b61STzoN8vYBlgFv\nbZBXSUQs7d0u4ALgrNLtrFQMDcZ2bwHOkrSxpC2BDwB/XfXKDceEjY/cGuRN6yixQV75tTcX2Ar4\n4Ijyys/Nxykey1o8Yx+jOne+pIOB30bERQBRfPz5W+A4SZtX3Eyn4nqLSMVOUeg3A8slbS1pY2BP\nYPEQ86A4CpqubsPrfQ/YaQj5VTS9nZ06K0fELcCVwD8A7wE+HRF3jCpvCGZs3hSvveMlbTrsvD7X\nAXs0vG4rNhz3Dky4vYAfl8+IiOWSbqd44H9aYRvdKkERca+kxyXtzNqj852AFwGPAjdVPNKslJds\nJmkxa0cx/xQR/1bj+nXnigKQNAc4BPhknawx6Da4zj9SvAE/Bjy/hbzpmMl5g157d1K89m4ecl7v\nubkhcBjw1RrX7e3fwrrXacrF3mdId37lI8CaeYuAAyiK/Uxg57T8CMWoZth5K9OoorGa3y3vvZHs\nTDHH/OZ0sketyXMlIlZKupRizl3r9zAN8gaNRiqNTNr+xfcMf+31nptQHLH/a52daptHMdPzM/qO\nuiQ9DXgG8J9VNlBz7tYbx+xNcUTyfYoj9hdRYb7eIG8YOjXW7b2R7ErxAn3bSPZoSKZxX65Jp1Hn\nPQRs13fedsCDI8qblpp5g157uwC3jiBvZZqxz4+IBU1+QesZ+xjVufMj4mqKd/K/SNedA/wzcG5E\nPFZxM50au7cI+GNgaRSWAdtQo9hr5rU9YxdA+rbBAuBkSTP5OdqZyXkRsQL4laSXwRPfBHoF8N1R\n5DH950vlvCleexfW+LZK5TyG81pozUx+0UyKo4CjJf2C4khodUR8qMb1uzXWvQl4OsUvFsvnPRwR\nS0eQt6mkxZJuSP9W/sZBT82Pu0+MCCLiRoqvlx1bN7NF3QnIOw54j6QbgG9R/A3y20eUN93vTtfN\nOwo4Jr32fg78Fjh1RHnT/l64v8c+oSTtD1wMHJWKadbz34oxa5+P2IcoIr4fEc+qU+ozfI45DJ2W\n81qT+2PnvMnNc7H3mQXF13Zet+W8NnWc57yZyMU+ft2c8zIfjXSd57yqPGO3bHjGbtY+H7GPWc5z\nvqTTcl5rcn/snDe5eS72PrOg+NrO67ac16aO85w3E7nYx6+bc17mo5Gu85xXlWfslg3P2M3a5yP2\nMct5zpd0Ws5rTe6PnfMmN8/F3kfSwvIDUHW5d176uVt1GejUWb+03G05b2HdrPTv7ze9bem8Jssz\n/b503mTnlZd721rvcps8ihkSqd0xQNt5bcr9vnTeZOdNAhe7VdLmi8cvVLPp8ShmQo3hI16n5bzW\ntH1fOs95o+ZiH5JZULTdlvPa1HGe83LiYp9c3TbDMh+NdJ3nvKom4bXgGbtV4hm72eTwEfuEmgWj\nn9bkPqN13mTnNeFiH5JZULTdlvPa1HGe83LiYp9c3TbDMh+NdJ3nvKom4bXgGfuYSDoSuBzYMyJ+\n0ULeqRT/Y+jV6XRiRPyoxvUrz70lrab4H1FvDDwOfAY4Oyo+2erO2Et5ovifDh8ZEXdVvX5dkn4P\nOBt4IbAM+B1wRkR8cUR5yyNiq9Ly64DnR8Tb28gbtXKepMOBs4BDI+LuUWblzEfs4/Ma4DqKsq2t\nzuhHxf9k+3Bg34h4HvC/gbovmk6NdVdExPyI2Bs4FDgMeF/NvDp6efPSv7VKvcEY7QqgGxF7RMQL\nKB7LnUeYt643xMpHZEPKq6xpnqRDgHOAP6pT6jXzpn0k6xn7LFKzaLcADgDeSMNip17R7gg8GBGr\nACJiaUTcVzOvW3N9UtaDwJuBtzW5fkWa5vU7lYOkg4HHIuITvfMi4u6IOG8UeUMy0/Mk6UDg48AR\nEXHHiPOy52Ifj1cCX4uIW4EHJc1rsI1ujXW/Aewq6eeSzpP00rph05krRsTtwAaSdmi6jfXYTNJi\nSTdIuqzB9bs11t0LWNwgo2kewObp9i2WdANw2ojzpqtu3ibAFyhGaL9sIW9aJmHG7mIfkpoP9rHA\nJennS4HXjjIvIlYA8ymOnB8ALpF0XJ28IXz8nO5R9VRWlkYxr6p75em8UCV9TNKNkn4wwrze7Zsf\nEfOoOdZqu4ga5D0OLAJOaCkvey72lknaFjgY+KSk24B3Akc32M7COutH4dr0Ing7ULcAOzXXf4Kk\n3YFVEfFA022MUs378hbgf/UWIuJtwCFA5U8juX/vukHeauAYYD9J72ohb1o8Y59FajzYRwMXRcSz\nImL3iNgNuF3SS2pGdmrs21xJe5TO2he4s2Zet8a6Txydp/HLBcC5NfPqaG3GHhHXAJtIOrF09haj\nyktau31DUjdPEfHfwBHAayUdP8K8UX5ynDE2HPcOzEKvBk7vO+9yivHMd2tsp1tj3S2BcyVtDawC\nbqUYy1RW8+PuppIWs/brjhdFxNl18mqa7jcdujXXPxI4R9IpFKOtFcApI8xr7fZJmgM81lZeEgAR\nsUzSYcB3JP06Iq4aQd5mku5i7Vdjz4qIc2rt7ASMfvw9dqvEfytmdpD0PODjEbH/uPfFmvMoZkLN\ngj9h0JrcZ7RV89J46bPAqW3kDUvueU242IdkFhRtt+W8NnWcBxHx8YjYOyKubiNviNrOm/Fc7JOr\n22ZY5qORrvOcV9UkvBY8Y7dKPGM3mxw+Yp9Qs2D005rcZ7TOm+y8JlzsQzILirbbcl6bOs5zXk5c\n7JOr22ZY5qORrvOcV9UkvBY8Y7dKPGM3mxw+Yp9Qs2D005rcZ7TOm+y8RiLCpyGcgIXAwhaX7+gt\np8u6I16+o4WMbku3pX/5YedNdN4dveW2Xovj7pv1nTyKmVA5jyvavm3Om+w8eyoXu1XiGbvZ5PCM\n3arqjHsHRiX3Ga3zZh8X+4Qaw5O523JemzrOm+g86+Nit0oyH410nTe5eZk/NxvxjN0q8YzdbHL4\niN2q6ox7B0Yl95mw82YfF/uE8ox9qDrOm+g86+Nit0oyH410nTe5eZk/NxtxsU+oOk9mSUdKukHS\n4nS6QdJqSa+osY1KeZJ2lnSbpG3S8rZpedeqWXVJeoakiyX9UtKPJF0laY+q1695X14j6dC+8xZI\nOm8UeWn7q9PjdqOk/y+p1v+PtEHeGkkfLi2fLOm9I867qLQ8R9IDkq6ssx1by8U+C0TEFRExLyLm\nR8R84Hzg2oj4eo3NdCpm3ZO2f3o660PAv0TEXXX2uaYvANdExHMi4gXAu4BnVL1yzbHW54Bj+857\nTTp/FHkAK9Jjty/wbor7tLIGeY8Bfyppu5rXa5q3Athb0iZp+VDg7hHmZc/FPqGaPpklzQXeC/xF\nzat2a6x7DvBCSQuAFwNn1syqTNLLgN9FxCd650XETRFxfY3NdGqsexlwuKQNU/5uwI4jzANQ6eet\ngaU1r183bxXw/4CTal6vaR7AV4Aj0s/HAhc3zDZc7LNKKqPPAn8bEUvqXLfOx+uIWAWcApwNLIiI\n1XWyatob+PE0t9GtumJELAN+CByWznoN8PlR5SWbpVHMf1AU7v8dcV4A5wF/LmmrmtdtmncJcGw6\nan8u8IPKV/aM/Slc7BOq4ZP5/cDNEfHvda/Y4BPC4cCvgH3qZrWtwX15CUWhk/6tdXTZIG9lGsX8\nAcUbymdGnEdE/Ab4NLCgwXWb5N0M/D7F0fqXefKnFKvJxT5LSOoARwFvbbiJTo2sfYFDgP2BkyRV\nnnc3cAvw/OlsoMGb1heBQyTNAzaLiBtGnPeEiPg+sL2k7VvI+wjwRmDzOleaRt6VwIep+UbpGftT\nudgnVJ0ns6RtgU8Bx0XEyoaR3Rrrnk8xgrkHOIMRztgj4hpgY0kn9M6TtI+kA2psplMzcwXF/fEp\nms2Ca+VROnqVtCfF6/ahUeelsdPngROmXn04eRT352kRcUvN61sfF/vscCKwA3BB6euOiyUdXXUD\nVT9eS3oTcGcqXIALgD0lHVh3p2s4CjhU0q2SbgI+CNxX4/rdBpkXU8yCmxR73bxNe49byjsu6v0t\nkLp55W2fCTy977yR5EXEkoj4WM3resa+Dv5bMVaJ/1aM2eTwEbtV1Rn3DoxK7n/bxHmzj4t9Qvlv\nxQxVx3kTnWd9XOxWSeajka7zJjcv8+dmI56xWyWesZtNDh+xW1Wdce/AqOQ+E3be7ONin1CesQ9V\nx3kTnWd9XOxWSeajka7zJjcv8+dmI56xWyWesZtNDh+xW1Wdce/AqOQ+E3be7ONin1CSFpaf0KNe\n7p3XZn6Lt63jvInOsz4exZiZZcZH7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZ\nF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5ll\nxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZm\nmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZ\nWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVu\nZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGx\nm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc\n7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmXGxm5llxsVuZpYZ\nF7uZWWZc7GZmmXGxm5llxsVuZpYZF7uZWWZc7GZmmfkfggw9L0xjjPwAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_kbd(qwerty, 'qwerty')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Question 4: Keyboard with Minimal Workload Average?\n", "===\n", "\n", "Now for a much harder question: can we find a different keyboard layout that has a smaller average segment length over the workload? First, let's note that there are two ways to modify a keyboard: \n", "\n", "* Keep the keys in the same locations but swap letters. (This is an operation you can do on a physical keyboard just by prying off the key caps and swapping them.) \n", "* Change the locations of keys. (On a physical keyboard you'd need a saw and glue to do this, but it is easier on a virtual keyboard.) \n", "\n", "Let's start by limiting ourselves to just swapping letters. \n", "\n", "This is an **optimization** problem. There are many permutations of letters; too many to try them all. To be precise, there are 26! (26 factorial) permutations, which is about 1026 (fun fact: 25 and 26 are the only integers for which n! ≈ 10n). If we can't try them all, we need some way to sample the configurations, trying to make progress towards a better one. Again, we'll try the simplest thing that could possibly work: \n", "\n", " 1. Pick two keys at random.\n", " 2. Swap them.\n", " 3. If that gives a better (lower) workload total, keep them that way.\n", " 4. If not, swap back.\n", " 5. Repeat this for a given number of times, say 1000." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def improved(kbd, swaps=1000, scorer=workload_average):\n", " \"Minimize scorer(kbd) by swapping keys and keeping improvements.\"\n", " kbd = kbd.copy()\n", " score = scorer(kbd)\n", " letters = list(kbd)\n", " for _ in range(swaps):\n", " A, B = random.sample(letters, 2) # Step 1: pick two keys\n", " swap(kbd, A, B) # Step 2: swap them\n", " score2 = scorer(kbd)\n", " if score2 < score: # Step 3: If better, keep them\n", " score = score2 # (and record the new best total)\n", " else:\n", " swap(kbd, B, A) # Step 4: swap back if not better\n", " return kbd\n", "\n", "def swap(kbd, A, B): kbd[A], kbd[B] = kbd[B], kbd[A]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note 1:** This strategy is called **hillclimbing**, drawing on the metaphor of getting to a high peak by trying to take a step, and continuing if the step is uphill, and returning if it is not. This technique often finds a local maximum—a solution that is better than all its neighbors, but not as good as another solution that is many steps away.\n", "\n", "**Note 2:** I make `scorer` be a parameter, in case we later decide we want to minimize something else other than `workload_average`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see how well we can do:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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\npP/xw6jyANaSdI+ke4t/3z/ivIG4x/58/lsxVon/VozZ5PCI3arqjHsHRmVCetDOmyF5k8CFfUL5\nb8UMVcd5E51nfVzYrZLMWyNd501uXubnZiPusVsl7rGbTQ6P2K2qzrh3YFRy7wk7b/ZxYZ9Q7rEP\nVcd5E51nfVzYrZLMWyNd501uXubnZiPusVsl7rGbTQ6P2K2qzrh3YFRy7wk7b/ZxYZ9QkhaWT+hR\nT/fmtZnf4mvrOG+i86yPWzFmZpnxiN3MLDMu7GZmmXFhNzPLjAu7mVlmXNjNzDLjwm5mlhkXdjOz\nzLiwm5llxoXdzCwzLuxmZplxYTczy4wLu5lZZlzYzcwy48JuZpYZF3Yzs8y4sJuZZcaF3cwsMy7s\nZmaZcWE3M8uMC7uZWWZc2M3MMuPCbmaWGRd2M7PMuLCbmWXGhd3MLDMu7GZmmXFhNzPLjAu7mVlm\nXNjNzDLjwm5mlhkXdjOzzLiwm5llxoXdzCwzLuxmZplxYTczy4wLu5lZZlzYzcwy48JuZpYZF3Yz\ns8y4sJuZZcaF3cwsMy7sZmaZcWE3M8uMC7uZWWZc2M3MMuPCbmaWGRd2M7PMuLCbmWXGhd3MLDMu\n7GZmmXFhNzPLjAu7mVlmXNjNzDLjwm5mlhkXdjOzzLiwm5llxoXdzCwzLuxmZplxYTczy4wLu5lZ\nZlzYzcwy48JuZpYZF3Yzs8y4sJuZZcaF3cwsMy7sZmaZcWE3M8uMC7uZWWZc2M3MMuPCbmaWGRd2\nM7PMuLCbmWXGhd3MLDMu7GZmmXFhNzPLjAu7mVlmXNjNzDLjwm5mlhkXdjOzzLiwm5llxoXdzCwz\nLuxmZplxYTczy4wLu5lZZlzYzcwy48JuZpYZF3Yzs8y4sJuZZcaF3cwsM/8f+GrD+g+dnKEAAAAA\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_kbd(improved(qwerty, 3000))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's a pretty good improvement! We decreased the workload average by about a third. (If you are reading this in an active IPython notebook, you can re-run the cell above and see a different result each time.) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualizing `improved`\n", "---\n", "\n", "Let's get a better feeling for what `improved` does. We will keep track of the workload average after each swap, and plot that as a curve. We will repeat that 10 times (because each run has random variation).\n", "\n", "I'll add another parameter, `scores`, to `improved`, If it is not `None`, then it should be a list into which we can accumulate all the scores (after each time step). Then I'll add a new function, `plot_improvements`, that plots the scores that `improved` accumulates." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def improved(kbd, swaps=1000, scorer=workload_average, scores=[]):\n", " \"Minimize scorer(kbd) by swapping keys and keeping improvements.\"\n", " kbd = kbd.copy()\n", " score = scorer(kbd)\n", " letters = list(kbd)\n", " for _ in range(swaps):\n", " A, B = random.sample(letters, 2) # Step 1: pick two keys\n", " swap(kbd, A, B) # Step 2: swap them\n", " score2 = scorer(kbd)\n", " if score2 < score: # Step 3: If better, keep them\n", " score = score2 # (and record the new best total)\n", " else:\n", " swap(kbd, B, A) # Step 4: swap back if not better\n", " scores.append(score) # <<< NEW\n", " return kbd" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def plot_improvements(kbd, swaps, scorer=workload_average, repeats=10):\n", " plt.ylabel('Workload average segment length') \n", " plt.xlabel('Number of swaps'); \n", " for _ in range(repeats):\n", " scores = []\n", " improved(kbd.copy(), swaps, scorer, scores)\n", " plt.plot(scores)\n", " plt.show()\n", " \n", "plot_improvements(qwerty, 2500)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This plot is interesting. I note the following:\n", "\n", "* Each curve follows a slightly different path (because the swaps are random).\n", "* The curves are grouped very tightly together; the variance is small. Almost everywhere, the difference between the best and the worst is about 0.2 or less. By the end, almost all the curves are between 1.9 and 2.0.\n", "* We make rapid progress, decreasing from 3.2 to around 2.2 in about 200 swaps, and to around 2.0 in about 500 swaps.\n", "* After 1000 swaps, progress is slow, and after 2000, even slower." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I can't say we've found the best possible keyboard, but it looks like progress will be slow in improving over about 1.9. \n", "\n", "Keys in Different Physical Locations\n", "---\n", "\n", "Now let's allow keys to be in different physical locations. Rather than allowing complete freedom of movement, we'll start from a few different fixed key layouts and swap keys from there. I'll define three layouts and gather them into a `dict`:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": true }, "outputs": [], "source": [ "keyboards = {\n", " 'qwerty': Keyboard(('Q W E R T Y U I O P',\n", " ' A S D F G H J K L ', \n", " ' Z X C V B N M ')),\n", "\n", " '4-by-7': Keyboard((' A B C D E F ',\n", " 'G H I J K L M',\n", " ' N O P Q R S ',\n", " 'T U V W X Y Z')),\n", "\n", " '5-by-6': Keyboard((' A B C D E ',\n", " 'F G H I J K',\n", " 'L M N O P Q',\n", " ' R S T U V',\n", " ' W X Y Z '))\n", " }" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a function to report on a collection of keyboards such as this (after improving them):" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nXMzNzFrg/wMexNo/VCenYwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nh1UD9v0/wBETtx3e3p5Mgp752cCfAkgSsDNw7879fwqcM3AOGPicR8TPgLcDr2tvOgF4R0RcMjDX\npDrBGM8G3iTpDyRtB7wG+G8Jxu2qh+wcER/rnN/70xzbL0TEvyZJNwPcM6dZ5QLXRcSbcmdZjKQ9\ngE9GxH06tyXPPKRnLul2wPeAXSPi5jbzWfP/g+hZIenOwFciYndJewMvAv4L8BTgRuAK4I5TeEPf\nbO0V4teBU4BjgH0jYn3eVIuTdAJwA7AtcG1EvCZzpCVJ2gv4PPDAiLgsd55Uil6Zl9JHKyXnwCud\nq4GvAge3Nx0OfDBBrA0M7ZlHxOXATZJ25fer8K8ADwLuB5yfopCneM7bHMcD/wQcO41CnvC1+Srg\nqcBBwD8mGnNBqpztG+T7gReMqZBD4cW8INXA/Ze6fEp6WZXghDmdpojT/ve0geNNyznAg2mK+X8A\nX+5sn51ojirROI8Bfg7sk2i8SVWKQSLiBuADwHsj4qYUY06oEo3zauCCiPhQovE24J75CpXw7YtW\nPXD/q4CdJm7bCbhy4LiTqoH7fxw4UNJ+wDYRcd7wSBtK9D3zc2gK997ABTTF/EHtT4p+OSToRUva\nFzgQeCBwnKQ7DR1zEXXCsW5pf6ahHjqApAp4AvDcoWPNoqKLeSmGvulExPXAzyU9Appv4gCPBr40\nPN0G6iE7tzlr4GRmd1UOTcE+BFgXjauBHUlYzBMtNN5O0175GU3r4o0JxtxAKQuioTnbz3ROBo5s\nryKmIufxLLqYl9KLTpTzSOBlks4D/h2Yi4iLE4y7INEL8TTgPkypmCf6nvn5wO1pWizd266JiHUJ\nxh/8nEt6BvDTiDijvekk4F6SHjo028Q8cynHm5YEOZ8F3AE4qfPVxHMlHTY83Wwo+tsspfzGoqS6\nhF9DL+F4FnQsnTOhgnJmO4eKXpnPeuHpqHMH6KnKHWA5JZzQrTp3gJ7q3AF6qnMHmHVFr8wtrRJW\n5ma2uKJX5muo37cqSijk/rdZ0nLO8Si6mBekyh2gD58wSVW5A/RU5Q7QU5U7QB/+nvkKlbCSbNW5\nA/RU5Q6wHPfMk6tzB+ipzh1g1rlnbgvcMzcrV9Er81LaAqXkLKGQu2eelnOOR9HFvCBV7gB9+IRJ\nqsodoKcqd4CeqtwB+nDPfIVKWEm26twBeqpyB1iOe+bJ1bkD9FTnDjDr3DO3Be6Zm5Wr6JV5KW2B\nUnKWUMjdM0/LOcej6GJekCp3gD58wiRV5Q7QU5U7QE9V7gB9uGe+QiWsJFt17gA9VbkDLMc98+Tq\n3AF6qnO3deNfAAABOUlEQVQHmHXumdsC98zNylV0MZ+/pJkvQLO6PS93jpHkrIB6xjKVeiydc0rb\nORRdzM3MrFF0z9zMzBou5mZmI+BibmY2Ai7mZmYj4GJuZjYCLuZmZiPgYm5mNgIu5mZmI+BibmY2\nAi7mZmYj4GJuZjYCLuZmZiPgYm5mNgIu5mZmI+BibmY2Ai7mZmYj4GJuZjYCLuZmZiPgYm5mNgIu\n5mZmI+BibmY2Ai7mZmYj4GJuZjYCLuZmZiPgYm5mNgIu5mZmI+BibmY2Ai7mZmYj4GJuZjYCLuZm\nZiPgYm5mNgIu5mZmI+BibmY2Ai7mZmYj4GJuZjYCLuZmZiPgYm5mNgIu5mZmI+BibmY2Ai7mZmYj\n4GJuZjYCLuZmZiPgYm5mNgIu5mZmI+BibmY2Ai7mZmYj4GJuZjYC/x/ixv8KNoy8GQAAAABJRU5E\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def report(keyboards=keyboards, swaps=3000, scorer=workload_average):\n", " \"Iterate through a dict of {name: kbd} pairs, showing kbd before and after improved(kbd).\"\n", " for (name, kbd) in keyboards.items():\n", " show_kbd(kbd, name)\n", " show_kbd(improved(kbd, swaps=swaps, scorer=scorer), 'improved ' + name)\n", " \n", "report()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(**Note:** The plots of different-shaped keyboards have different-sized squares around the keys. Some of the plots have a lot of whitespace around them. If anyone knows an easy way to tell `plot` to display them better, let me know.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "So the more compact keyboards with a smaller diameter (`4-by-7` and `5-by-6`) seem to perform slightly better than `qwerty`. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Question 5: How often are two words confused because of similar paths?\n", "===\n", "\n", "When can one word be confused with another? When their paths are similar (which means that their corresponding letters are in similar locations). For example, on a Qwerty keyboard, the paths for \"HELLO\" and \"JELLO\" are similar, because **H** and **J** are adjacent, and the other letters are the same.\n", "\n", "\n", "\n", "We'd like to know, for a given keyboard, how confusing is it? How many words have paths on the keyboard that can be confused for other words? We have our work cut out for us:\n", "\n", "1. Determine what letters could be confused for each other.\n", "2. Determine what words/paths can be confused.\n", "3. Invent some metric for the overall confusingness of a keyboard. \n", "4. Try to find less-confusing keyboards.\n", "\n", "Letter Confusions\n", "---\n", "\n", "So, as a first step, we will make a mapping from each key to the keys that it can be confused with. I'll say that any key within a distance of 1.5 units on the keyboard is a **neighboring** key, and thus a potential confusion:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def neighboring_keys(kbd, radius=1.5):\n", " \"Build a dict of {Letter:NeighboringLetters}, e.g. {'Q':'AQW', ...}.\"\n", " return {A: cat(sorted(B for B in kbd if distance(kbd[A], kbd[B]) <= radius))\n", " for A in kbd}\n", "\n", "cat = ''.join ## Function to join letters (or strings) into one string" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'A': 'AQSWZ',\n", " 'B': 'BGHJNV',\n", " 'C': 'CDFGVX',\n", " 'D': 'CDEFRSXZ',\n", " 'E': 'DERSW',\n", " 'F': 'CDFGRTVX',\n", " 'G': 'BCFGHTVY',\n", " 'H': 'BGHJNUVY',\n", " 'I': 'IJKOU',\n", " 'J': 'BHIJKMNU',\n", " 'K': 'IJKLMNO',\n", " 'L': 'KLMOP',\n", " 'M': 'JKLMN',\n", " 'N': 'BHJKMN',\n", " 'O': 'IKLOP',\n", " 'P': 'LOP',\n", " 'Q': 'AQW',\n", " 'R': 'DEFRT',\n", " 'S': 'ADESWXZ',\n", " 'T': 'FGRTY',\n", " 'U': 'HIJUY',\n", " 'V': 'BCFGHV',\n", " 'W': 'AEQSW',\n", " 'X': 'CDFSXZ',\n", " 'Y': 'GHTUY',\n", " 'Z': 'ADSXZ'}" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qwerty_neighbors = neighboring_keys(qwerty) \n", "qwerty_neighbors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see, for example, that **Q**, off in the corner, has only **A**, **W**, and itself as neighbors, while **G**, in the middle of the keyboard, has 8 neighbors. \n", "\n", "Word Confusions\n", "---\n", "\n", "Consider each of the letters in the word \"HELLO,\" and all the possible choices for neighbors of each letter:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['BGHJNUVY', 'DERSW', 'KLMOP', 'KLMOP', 'IKLOP']" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "columns = [qwerty_neighbors[L] for L in 'HELLO']\n", "columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These are five columns of letters, and if we pick one letter from each column, we get a path that is formed by letters that are each confusions of letters in the original word, and so the whole path is a confusion for the original word. So \"JELLO\" is a confusion for \"HELLO\", as would be \"BDKKI\" and \"YWPPP\", except those are not words.\n", "\n", "It turns out that there is a library function, `itertools.product`, that will take alternative choices, and generate all possible ways of assembling a sequence consisting of one selection (letter) from each alternative choice." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [], "source": [ "paths = {cat(picks) for picks in itertools.product(*columns)}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How many paths are there?" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5000" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(paths)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at a few of them:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['NELKI', 'NWLKL', 'VEMKI', 'VEOOP', 'UWPMK', 'JSLML', 'GRMMO', 'UWKKP']" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random.sample(paths, 8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And let's see all the paths that are also words:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'BROMO', 'BROOK', 'HELLO', 'JELLO'}" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "WORDS & paths" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Only 4 out of 5000; That's pretty good, but it means \"HELLO\" is still a confusing word. We can package this as the function `confusions`:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def confusions(word, neighbors=neighboring_keys(qwerty)):\n", " \"All valid words whose paths could be confused with the path for the given word.\"\n", " columns = [neighbors[L] for L in word]\n", " return {cat(picks) for picks in itertools.product(*columns)} & WORDS" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'BROMO', 'BROOK', 'HELLO', 'JELLO'}" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "confusions('HELLO')" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'ALTOS', 'EIDOS', 'SIDLE', 'SKEPS', 'WIELD', 'WORKS', 'WORLD', 'WORMS'}" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "confusions('WORLD')" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'FEARING',\n", " 'FRAYING',\n", " 'GEARING',\n", " 'GRATING',\n", " 'GRAYING',\n", " 'GREYING',\n", " 'REARING',\n", " 'REEFING',\n", " 'RESTING',\n", " 'TEARING',\n", " 'TESTING'}" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "confusions('TESTING')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So far, so good. But I'm worried about the efficiency of `confusions`.\n", "\n", "My first concern is that `WORDS` has 178,691 words, including many unusual words, so there might be too many confusions. I will read in a smaller word set, with only common words:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": true }, "outputs": [], "source": [ "! [ -e words.js ] || curl -O https://xkcd.com/simplewriter/words.js\n", " \n", "COMMON = set(re.findall('[A-Z]+', open('words.js').read().upper()))" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3614, 'SPECIALS', 'UNDERSTANDINGS')" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(COMMON), max(COMMON, key=path_length), max(COMMON, key=len)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "More Efficient `confusions`\n", "---\n", "\n", "Another issue is that `confusions` is really slow:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 3.12 s, sys: 395 ms, total: 3.51 s\n", "Wall time: 3.52 s\n" ] }, { "data": { "text/plain": [ "{'SOMETHING'}" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time confusions('SOMETHING')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It took (on my computer) 3 seconds to compute this. Why so long? Let's count:" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[7, 5, 5, 5, 5, 8, 5, 6, 8]" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[len(neighboring_keys(qwerty)[L]) for L in 'SOMETHING']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are 7 × 5 × 5 × 5 × 5 × 8 × 5 × 6 × 8 = 8,400,000 paths for `confusions` to consider. `'PALEOMAGNETISMS'` would have about 10,000 times more paths. Looking at every path is slow, but for most paths, we're wasting our time. For example, one choice for the first two neighboring letters of 'SO' is 'XP', but 'XP' does not start any word in the dictionary. Nevertheless, `itertools.product` will generate 240,000 combinations that start with 'XP', and will then rule them out one at a time. It would be better to stop as soon as we see 'XP', and never consider continuations of this path.\n", "\n", "So that gives us the key idea for a more efficient version of `confusions`: *only follow paths that form a prefix of some word.* I'll make a set of all the prefixes of the `COMMON` words:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def prefixes(words):\n", " \"Return a set of prefixes (1 to N characters) of this collection of words.\"\n", " return {word[:i] for word in words for i in range(1, len(word)+1)}\n", "\n", "PREFIXES = prefixes(COMMON)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'T', 'TH', 'THE', 'THES', 'THESE', 'THEY', 'THO', 'THOS', 'THOSE'}" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prefixes(['THESE', 'THEY', 'THOSE'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can describe the more efficient version of the `confusions` algorithm:\n", "\n", "1. Maintain a queue of partial paths, where a partial path is a string representing choices for neighboring letters for a prefix of the word. For example, 'HE' and 'JE' are both partial paths for the word 'HELLO'. Initialize the queue to have just one partial path, the empty string.\n", "2. Remove a partial path from the queue. Find all possible ways to extend the path by adding a neighboring letter, but only if doing so creates a path that is a prefix of some word in the dictionary. For example, given the word 'HELLO', and the partial path 'JE', consider all the neighbors of 'L' (namely, 'K', 'M', 'L', 'O', or 'P'), but only 'JEM', 'JEL', and 'JEO' are prefixes of words, so add just those to the queue.\n", "3. When a partial path reaches the same length as the word ('HELLO' in this example), then don't extend it any farther; instead check to see if the path is a word. If it is, yield it as a result.\n", "\n", "A word is `confusable` if it has a confusion word (other than itself)." ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def confusions(word, neighbors=neighboring_keys(qwerty)):\n", " \"All valid words whose paths could be confused with the path for this word.\"\n", " Q = [''] # A queue of partial paths \n", " while Q:\n", " path = Q.pop()\n", " if len(path) < len(word):\n", " for L in neighbors[word[len(path)]]:\n", " if path + L in PREFIXES:\n", " Q.append(path + L)\n", " elif path in COMMON:\n", " yield path\n", "\n", "def confusable(word, neighbors=neighboring_keys(qwerty)) -> bool: \n", " \"Is this word confusable with another, given this keyboard's neighboring keys?\"\n", " return any(c != word for c in confusions(word, neighbors))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's check the speed (remember the old version took over 3 seconds):" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 119 µs, sys: 0 ns, total: 119 µs\n", "Wall time: 122 µs\n" ] }, { "data": { "text/plain": [ "{'SOMETHING'}" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time set(confusions('SOMETHING'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We went from about 3 seconds to about 100 microseconds: that's 30,000 times faster! We can look at some more confusions:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'A': 'S A',\n", " 'ACCEPT': 'ACCEPT',\n", " 'AIRS': 'WORE WORD WIFE WIDE SURE SITS SIRS SIDE AIRS',\n", " 'BEATER': 'NEARER NEARED HEATER HEATED GRAYER GRAYED BESTED BEATER',\n", " 'BEGAN': 'BEGAN',\n", " 'BLOWER': 'NOISED BLOWER',\n", " 'DISCOVERS': 'DISCOVERS',\n", " 'DRINK': 'DRUNK DRINK',\n", " 'DROVES': 'DROVES DRIVES',\n", " 'ENTER': 'ENTER',\n", " 'EXCEPT': 'EXCEPT',\n", " 'GATHER': 'GATHER FATHER BAGGER BAGGED',\n", " 'GUESSING': 'GUESSING',\n", " 'LEADINGS': 'LEADINGS',\n", " 'LOOKER': 'POOLED MOONED LOOKER LOOKED KILLER KILLED',\n", " 'MAPS': 'MAPS',\n", " 'NEEDED': 'NEEDED BEDDED',\n", " 'NIGHTS': 'NIGHTS MIGHTS',\n", " 'RETURNS': 'RETURNS',\n", " 'ROOMED': 'ROOMED ROLLED FILLED',\n", " 'SEXING': 'SEXING ADDING',\n", " 'SHORTEST': 'SHORTEST',\n", " 'SHOVING': 'SHOVING',\n", " 'SKINNED': 'SKINNED',\n", " 'SOUND': 'WOUND SPINS SOUND SKINS',\n", " 'STOPS': 'STOPS STOOD STOLE DROPS',\n", " 'THANKS': 'THANKS',\n", " 'TRIPE': 'TRIPS TRIPE',\n", " 'TV': 'TV',\n", " 'VIEWED': 'VIEWED HORSES'}" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "{w: ' '.join(confusions(w))\n", " for w in random.sample(COMMON, 30)}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualizing Paths on a Keyboard\n", "----\n", "\n", "It would be nice to see potentially confusable word paths on a keyboard.\n", "I'll add a call to `plot_paths` in `show_kbd`:\n", "\n" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def show_kbd(kbd, name='keyboard', words=()):\n", " \"Plot the keyboard and show title/stats.\"\n", " for L in kbd:\n", " plot_square(kbd[L].x, -kbd[L].y, label=L)\n", " plot_paths(kbd, words)\n", " plt.axis('equal'); plt.axis('off')\n", " plt.title(title(kbd, name));\n", " plt.show()\n", " \n", "def plot_paths(kbd, words):\n", " \"Plot paths for each word.\"\n", " for (i, word) in enumerate(words):\n", " Xs = [kbd[L].x for L in word]\n", " Ys = [-kbd[L].y for L in word]\n", " plt.plot(Xs, Ys, '-o')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see how it works on three similar paths:" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_kbd(qwerty, words=['VALUE', 'VALOR', 'CAKE'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " OK, we're on the right track, but I see three problems, which I think I can solve: \n", "\n", "- The letters are obscured by the circles. Solution: offset paths away from the center.\n", "- When the paths are the same, they overwrite each other. Solution: offset each path towards a different corner.\n", "- There is no indication what direction the path is going in. Solution: put a black square on the start position.\n", "\n" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def plot_paths(kbd, words):\n", " \"Plot paths for each word, each with a different offset (and color).\"\n", " Q = 1/5 # Q originally meant a quarter of a key width; but 1/5 looks nicer.\n", " offsets = [Point(-Q, -Q), Point(-Q, +Q), Point(Q, +Q), Point(Q, -Q)]\n", " for (i, word) in enumerate(words):\n", " Xs = [kbd[L].x + offsets[i % 4].x for L in word]\n", " Ys = [-kbd[L].y + offsets[i % 4].y for L in word]\n", " plt.plot(Xs, Ys, '-o')\n", " plt.plot(Xs[:1], Ys[:1], 'ks')" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgl\ndhGRjFFiFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJXYR\nkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGM\nUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFi\nFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJfYcZtYQ/78K\nw40Zj9dQzThV3rZGxVO8YoYrzt31iD2ABsXrnI+sv5aK17njVfNh0QaKVISZNbh7Q9ZiiXRkKsW0\ns6qenrVDPKC+yvGqJuvvneJ13nhK7Dk2gcRX7XiNVY5XTfWKp3gdkRJ7+2vMcryMl0YaFU/xkqrm\nsaAau6TW22zoMLh6IAxaAPOnwRXL3Ofkm7ZQ3du62VD6czU9GcQK5rOQK3x1/mUkpRp7NlViX8k6\ntdjbWWer8/U2G3oC/PlxOPW3cPjjcOoJ8OfeZkMLzFLfah262VB25c+cxqmczOGcxqnsyp+tW8Fl\ndEid7b3rjPEqua90hO2rWCy12FuqdqvPzBrdvb6zxDvQbPzjcGqP2LiVwMnwyAT4JO5rcuK1ej1t\nexvPaZxKbWzkGuBvvMMoZhe7bixhMFvwetHzp7WQ3enPDMWrYLzH2YnD2LrVvnInd/lcH11KuHY4\n9qqWW7pWI4i0qbEzxRsIg3rkjOsB7AmHA0sxmwlMAV4Apjjc3GohPRnU4kAFqAVW8BpwcdEr9wRn\n8yluLXr+tJ5UvIrHW8GPqWXrFuNqCftQ6RrLsIzEVGPvRMxsW+AnwO6E0tajwCXu/kGZ41wPzHH3\nG6Phx4C57n5ONPwD4HV3H1fGmOsISdoAB+49AIbna7GPgrsmwReAPYARwHBgxCrYrzssJUr0wAuH\n9+Pkp87k2A/qYgtZA1yDA88DmwGvAKe5+7IU65u4RWRmWwJPRNs1EFgHvB0N7+vua5PGTbF+E4Fv\nu/tj0fBJwOfd/Zhyx4qWPwSY4O57xsaNAZa7+/UViLfc3XuVdZmFzu7u5C7m8Q2ajz0DJgBfq9B7\n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\nItZewJGE/uBfiS5uVohPh/k7l9K9soiy1oPAkWa2N1CXNqmXUhOOLppubWZbVyHeD4GzgO5pZioh\n3kPAtaQsw6jG3poSeyeVZmeOeqbcDpzu7quKDNmYYtqbgIuiC6nfJ0WNPS13/wtQa2Znh2EcrA7s\nxaSJHqw+ZcyV0XJup7hacKp4xGrsZrYr4bh9t9Lx3H0xocx0dsr5i4pHeD3Hep77/0g6qrFvGs4F\n+gE3mxmEA8mB77j7/UkWkLw0Yl8AXosSLsDNwOfN7BB3n5h2xRM6EfihmV1KKBvMAS6GpP3oF/du\nXaPHN9xSgLodoLYW1qyB98JtCUJCfwA4uYj1bUw5/eZRjb0pAZ7u6WqoaePFl30d4Syv4vGi6z4/\nTjmvaux5qMYuiVTza9vVjdXWLRAGHgBv7phntpJuKSBSaSrFSFL17b0ClRCVbkYXqNEPyj9XXUm3\nFKh2TVjxNj1K7J1UR71XTCdV3/RP/AtT8N77+SevLfWWAvUbnaK8sh5PciixSyIZr2M25h+9Zk26\n8aXGq5hMx8v4vlkU1dglkazW2DeyHk8D++V5SjV26dDUYpek6tt7BSqljbJWuKUAdW9BnyXhb8Hb\nEpQjXkUo3qZH3R07qXZo1TZWMVa11ecbWcFfScobr4KyHk9yqMUuiXSE0kgFNSpe542X8X2zKKqx\nSyKbYo1dpLNSi12Sqm/vFaiUrNeEFW/To8TeSZlZQ3yHrvRw07hqxq/ittUrXqeOJzlUihERyRi1\n2EVEMkaJXUQkY5TYRUQyRoldRCRjlNhFRDJGiV1EJGOU2EVEMkaJXUQkY5TYRUQyRoldRCRjlNhF\nRDJGiV1EJGOU2EVEMkaJXUQkY5TYRUQyRoldRCRjlNhFRDJGiV1EJGOU2EVEMkaJXUQkY5TYRUQy\nRoldRCRjlNhFRDJGiV1EJGOU2EVEMkaJXUQkY5TYRUQyRoldRCRjlNhFRDJGiV1EJGOU2EVEMkaJ\nXUQkY5TYRUQyRoldRCRjlNhFRDJGiV1EJGOU2EVEMkaJXUQkY5TYRUQyRoldRCRjlNhFRDJGiV1E\nJGOU2EVEMkaJXUQkY5TYRUQyRoldRCRjlNhFRDJGiV1EJGOU2EVEMkaJXUQkY5TYRUQyRoldRCRj\nlNhFRDJGiV1EJGOU2EVEMkaJXUQkY5TYRUQyRoldRCRjlNhFRDJGiV1EJGOU2EVEMkaJXUQkY5TY\nRUQyRoldRCRjlNhFRDJGiV1EJGOU2EVEMkaJXUQkY5TYRUQyRoldRCRjlNhFRDJGiV1EJGOU2EVE\nMkaJXUQkY5TYRUQyRoldRCRjlNhFRDJGiV1EJGOU2EVEMkaJXUQkY5TYRUQyRoldRCRjlNhFRDJG\niV1EJGOU2EVEMkaJXUQkY5TYRUQyRoldRCRjlNhFRDLm/wGIYCrFxnvMOwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_kbd(qwerty, words=['VALUE', 'VALOR', 'CAKE'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That looks busier, but it is easier to follow the paths. Another example:" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJ\nGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgl\ndhGRjFFiFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJXYR\nkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGM\nUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFi\nFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcR\nyRgldhGRjFFiFxHJGCV2EZGMUWIXEckYJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEckY\nJXYRkYxRYhcRyRgldhGRjFFiFxHJGCV2EZGMUWIXEcmY/w9vjpVcLw21AQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_kbd(qwerty, words={'HOUSED', 'HOUSES', 'NOISES'})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Average Confusions of a Keyboard\n", "===\n", "\n", "The question is: how confusing is a keyboard? One metric for confusingness is the percentage of words that are confused with other words:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "def confusingness(kbd):\n", " \"The proportion of words in COMMON that are confused with other words on this keyboard.\"\n", " neighbors = neighboring_keys(kbd)\n", " return mean([confusable(w, neighbors) for w in COMMON])\n", "\n", " \n", "def title(kbd, name): \n", " X, Y = span(kbd[L].x for L in kbd), span(kbd[L].y for L in kbd)\n", " return ('{}: size: {:.1f}×{:.1f}; path length: {:.1f}; confusingness = {:.0%}'\n", " .format(name, X, Y, workload_average(kbd), confusingness(kbd)))\n" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'4-by-7': 0.4571112340896514,\n", " '5-by-6': 0.5282235749861649,\n", " 'qwerty': 0.5398450470392916}" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "{name: confusingness(kbd) for (name, kbd) in keyboards.items()}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "About half the common words are confusable, with a little bit of variation between keyboards." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Question 6: Is there a Keyboard that Minimizes Confusion?\n", "===\n", "\n", "Consider this:" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 134 ms, sys: 3.99 ms, total: 138 ms\n", "Wall time: 143 ms\n" ] }, { "data": { "text/plain": [ "0.5398450470392916" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time confusingness(qwerty)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 188 µs, sys: 3 µs, total: 191 µs\n", "Wall time: 202 µs\n" ] }, { "data": { "text/plain": [ "3.2333097802127653" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time workload_average(qwerty)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Computing `confusingness` takes about 500 times longer than computing `workload_average`, so if we want to use `confusingness` as a scoring function, we will have to settle for fewer swaps:" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 10.6 s, sys: 26.7 ms, total: 10.6 s\n", "Wall time: 10.6 s\n" ] } ], "source": [ "%time show_kbd(improved(qwerty, swaps=100, scorer=confusingness))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This did indeed reduce confusingness (which was 54%); not bad for only 100 swaps." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Question 7: Is there a Keyboard that Maximizes User Satisfaction?\n", "===\n", "\n", "What is user satisfaction? I don't know, but for now I'll approximate satisfaction (or rather, *dissatisfaction*, since lower scores are better) with a combined score that is the product of workload average and confusingness. Then I (rather arbitrarily) scale the result by 5, just because I think a number like \"2.1\" looks better than \"0.42\".\n", "\n", "First we'll define the combined scorer function and incorporate it into `title`:" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def dissatisfaction(kbd, scale=5):\n", " \"The product of workload average and confusingness, scaled.\"\n", " return scale * workload_average(kbd) * confusingness(kbd)\n", "\n", "def title(kbd, name): \n", " X, Y = span(kbd[L].x for L in kbd), span(kbd[L].y for L in kbd)\n", " return ('{}: size: {:.1f}×{:.1f}; path length: {:.1f}; confusingness: {:.0%}; overall: {:.1f}'\n", " .format(name, X, Y, workload_average(kbd), confusingness(kbd), dissatisfaction(kbd)))" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_kbd(qwerty)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's try to minimize confusion. This should take around 2 minutes:" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ndiMRvXUAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAf0AAAEKCAYAAAAYW4wpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xm4JFV5x/HvD4ZddgwimysBBVlExC1cQFRAg0aJ4oJI\nEDQuKG64RK5JNCgRiAq4BZWILG6okRiN2BFB1AgalkRFtpFFGAdkmFHC8uaPc5qpae7S01V36tyu\n3+d55rm3uqpOv13n1Hmrzqm+o4jAzMzMxt9qbQdgZmZmq4aTvpmZWUc46ZuZmXWEk76ZmVlHOOmb\nmZl1hJO+mZlZR8ya9CVdIenPVkUwq4qkbSXdL6mRix5J10rap4my5so41uN8JmkvSQtXYvvvSTp8\nLmOa4b3vl/SoNt67BJJeK+kWSXdK2rhGOUskPaK5yKxU1XNG0mck/W3bMfXNmvQiYseI+P6qCGYV\nm/YPFEjqSfpDPsmXSPqfVRmYpGdK+qmkuyTdIOlFdctcFfUo6TpJy/Jxu1PSt2bZ/oOSFkm6TdLx\nNd97r3yizXhyNfmeKxnfVImzuD+SMc3FxchxSjpU0n9J+n1uyx+c7mJb0tPz+dZvP0vycXvBqO9f\nl6QFwIeBZ0bEBhFx+6hlRcT6EXFdY8EVQtIJkn6Z6/gqSa8YWL9LbgNLJf1E0s6VdftKukbSTZJe\nXHl9w9wHrrcqP0uDRjpnJB0g6UJJt+dj8snpjoGkrac5X94803sUM7wvafW2Y6gI4K/zSb5+ROyw\nqt5Y0uOAM4F3AhsAOwM/XVXvX1MAB+bjtkFEPGe6DSUdBfw5sBPwBOB5ko6srF9D0uOn2G/XKV5b\nAJwMXDJTcLO95xwrLsGvBNXYdx3gaGBT4MnAvsBbp9owIn6Qz7cNImID4LnAEmDGi8c59jBgLWCV\nXvjPM3eRzvsNgcOAf5K0J6TzGDgPOAPYKP/8Wj5nAU4CDgSeA5wqqd/W/gH4QEQsXWWfYkhD5qpR\nz5kNgL8DtgB2ALYCTphqw4hYOHC+7ATcB3xpxneIiBn/AdcC++TfjwPOBf4FuBP4OfBY4Fjgt8D1\nwH6Vfb8HfAD4EfB74KvARnndtsD9wOF5v15+/c+BK4DFwAXA9vn1twNfHIjtn4CT8+8bAJ8GbgIW\n5gOnvG414B+B24Crgb/OB2e1aT7z94DDZzs2A8foWOBK4HfA6cCaed3lpBOiv+2CHMfO05R1JvC+\nYd97YN9NgW8At+c4/nOaerw919+dpBP2fmCbvO65wGV5mx8AO63kcdhnyG0vAo6oLL8KuLiyvGdu\nU7tUXvvLXL8PHSjrHcDx+bj/bY33/Abw9mn27bfXVwM35n9vqax/EnBxPm43Ah8FFuR1/5n3vSsf\n84OBvXI7PSZ/zhuBw2aIfYU2STpvrsr1/G/9+svr7geOAn5JOo8+Vlm3GunO9Tbg18Dr8varAX8P\n3Assy3F+ZLbyRmijbwa+NuS2nwH+ubL8NGDxDNuvnT/bdbkevg+slddN2a9U2u1bSP3Z7cBZwJqk\nvu0uUl9xJ/AflXawWmX/B+oGeDTQA+4AbgXOGqiXR1U+28eAf81l/xB4ZGXbZwH/m+M5JZfZf49X\nAheSksHiXI/Pqew7U184U3wn5bb4+3wsHjdiHX8NeHPlcywcWH898Kz8+68rr98MbAbsAZw/Tdk/\nB14yw3u/GvgVsIh0sfGw/PqpwAkD254HvCn/vgUpWd6aj+cbKtsdB3yRlPfuIJ17057v09T1tP3S\nLMfyBcDPh9z2OOC7s243REGDSX8Z8ExSJ/E54BrSXenqwBHANQMnw0LSFcs6+aD+S17XP3k+m9et\nxfKTbJ9c3ttyBS4Atsnr1sv7r5Yb9ZPy8ldzxa6dG84lwKvzuteQOsiHk642L2D2pP/b3AAuBPYa\n4hj9d6X8H/QrOX+GsyvbHjRTJeYG97e5vBtJV8YbD9PoSRdYp+ZjszrwtKnqcWCf9+fPuzqwa/7c\nu5OuVF+R91sjb3sKM3T4edubcxnfAp4ww7Z39OsuL+8G/H5gm36S3wF4HnDLYJm5Hf0vsC6znFzD\nvOcM+/bb65m5je2Y28c+lbL2yMdtG9IF4BsHOoFqp74XcA/pnFod2B9YCmw4Q5vsd/oHkRLwdrmu\n3wVcNPBeXwfWB7bOcfY72deQkt8WwIbAd6icC0xxwTtLeVuTEs9WQx7Hr5Lu4Gbbbl1SMnzGMOVW\n2ucFpLtzkS4c18jHacp+pdJuLwE2J52/VwFHVur9PpYnzf7ydEn/C8A78+9rAk+tbHcfKyaC24An\n5jr8PPCFvG5TUuI9KK97I3A3Kyb9u0nJR7lObxw4xtP1hVPGR0rOPwHWz8t/Cmyefz8E+NmQdbAO\n6ZzdLy+/CfjmwDZfZ/lFwcWkUbedgd+Q+vqLgUcPW++VcvfJx3TnXO8fId/4AM8Arq9suxEpl22e\nj+F/Ae/O7eMRpJvD/mc4Lh/v5+XltUh95Wzn+5RJn3Sh8NQhP9PJ/XYxxLZXA6+YdbshChpM+v9e\nWfdc0onZPyEekj/sBpWT4QOV7XfIB08sP3m2rax/DysmSOWG8Gd5+fvAy/Pv+wG/yr9vDvyRfFWf\nX3sJ+aoH+C75JK7sO1PSfxKwXm44h+bP+MhZjtGrK8v7V2LbgnQCPyQvfxF46wxl3U26kHo0qeP7\nEvD5ISv9faQT/kEnDFMkfeDF+b02ycunMjDKQEqoQ3W8wFPyCbE2aeTj5n5bmGLbe4HtKsuPAe6b\nYrtXkpL9rcAeU6w/D3jRVCfXqO85zb79pP/YymsfBD41zfZHA1+uLD/QCeTlvUhJvpo8fjvVZ6yc\nS/1O/3zgVZV1q+Wytq6811Mq688hj2Dkc6HaVvdluKQ/ZXkr84+UpG7ot7dZtn0FlbvAIbYXqRPf\ncYp1s/Ur1wKHDNTrqZV6rx6f2ZL+54CPA1tOEcdgIvhkZd3+wFWVz37RwL43sGLS/2Vl3Tq57D/J\n/2bqC6eMD9ibdK4/mdyfj/Ivl//NyvJ7GEhapAuc9+bfd87H74c5hjeQ+rGdSDcO3+3X0xDv/Wng\n+MryesD/sXwU8zrg6fn3I4D/yL8/GbhuoKxjyaNMpLzXm+W9pz3fGfFOn5SnfscQF0Cki5o7gXVn\n23aUOf3fVn7/A7Ao8rvmZUjJv6/6hPL1pES6WeW131R+f3jeBoBc7kJgy/zSWaSrTvLPL+Tft8nl\n3ixpsaTbSQ37oZVyB+OYVkT8JCKWRsQ9EXEGaVj4AABJ51cenjikslv1c1yf35OIuDnv/0JJG5JO\n7s/nsk6rlHVs3vcPwOkR8euIWEa6e99/pngrPkQaKfi2pKslvWO6DfPc+EeB50fE4vzytsBb8jHs\nH8et+p9lNhHxw4i4OyL+GBHHk+6snzHN5neRhiH7NsyvDbqWdCGxjJT8q5/heaQ7k5nnsFb+PacT\nTFPPkh4r6RuSbpZ0B2kEZbMpyqj6XUTcX1lexornznS2Jc2bLpa0mNQxBMvPE1jxPK2WO3guDPsN\ngunKG4qk55OOyXMq7W0mh5JGuYa1GamdXDPFutn6Faj5+SreRroI+7GkyyW9aoZtq+15pjqCFdvd\nCvtGRLXf3ZaZ+8Ip44uI75GmG04Bfivp45JWto5PAB5HupnoGzznIJ13S/L7/jwi9o6Ip5Cem3gV\nqc/7NCnZHk4aVh/GYD0vJZ0b/Xo+h+X546WkUTtI+WPLgX7vnaQLqL4V6mPE831o+ZmIM4EXRsSv\nh9jlUNJFx7LZNlwVD/JtXfl9W9KV16LKa1H5/aa8zeD+N+bfvwhMSNqSNNfRT/oLSVe3m0bEJhGx\ncURsFBFPyOtvniKOlRHkBzMi4oBY/vDEWQNxVsu/qbJ8Bunq/WDSHPItuazXVsrqP0n+3ysZ2/Ig\n04XKWyPi0aQ5zGMk7T24naQ/IY0IvDYiqu+3EHh/Pob94/iQiDhn1JCY/oGWK0lX+X275NeqcT6Z\nNNLxQuBE4LuStqhssg/wxHzi3UzqbN4k6aujvucsxIr1vA3L6/k0Uqf16IjYiDRUWOcBuJksBI6a\nop5mfJAxu5l0Ide3zcD6oGGSngN8AnhuRFw1xPZbAROsXNJfROoDHj3Fuun6lcFEOoz+g2XrVl57\nWP+XiLg1Io6MiC1Jw+6nTvGtjdkM9lewYp3NZMa+cKb4IuJjEbE7KXH/KekCYSiS3gc8mzQkXr2Q\nvpI0fF/1BKY+704C3h0Rd5Pu9H8aEdcDa0gaJqGuUM/5qfdNWZ4/zgJeJGkb0t39l/PrC0nT0tXz\nacOIeF6l7MHzYs7O93xDdh7pGZ/eENuvTcotnx2m/FWR9F8uaXtJ65KGbb5YGRkYPEjnAgdK2lvS\nAklvJTXgiwEiYhHpoajPkCrpF/n1W4BvAydJWl/Jo7T8e+nnAm+UtKXS92xnugPeUNKzJK0laXVJ\nLyPdrc72BPHrcvmbkOZYz66sO4805/tGZu/IPgO8StIj8zF7B+kBs1lJOlBSv9NbQhrOvm9gm9VZ\n/mzFlweK+BTwGkl75G3Xy18hmfVrM/nrI0/NT92vJeltpBPuoml2OYN0UfLwfBF3TP7s/fIeT3og\n6LCIuCAiPgL8M/AfWv5d6feQ5mt3zv++nj/DdHdXs73n9yS9d5aP+jeS1snxvYrl9bw+cGdELJO0\nPfDagf1uAZr6rvvHgXflb3r02+ywX+s8Fzg6H4ONSA/IVv22wThR+vsVnyfdsQz7LZRDScPb1w6U\ntZek+6faIfcppwMnStpC0mqS9sxPj0/Xr/xw2I9ReZ9FpCTy8vweh1O50JD0oty2II103Z//rYxv\nAjtK+vPcB72eNIU5q9n6wunik7S7pD2Unqr/A+n4DBW3pHeS7qCfGRF3DKzuAfdJeoOkNSW9MZd7\nwUAZ+5GmJP4tv3QNsG8+z9Yk3bH3/ybKodOEchap73yCpLVIIwaXRMQN+dj8LJfzaeBbEXFn3u/H\nwBJJb5e0dj7mj5e0+wwfe7bzfSSSdiQ9mPuGiDh/yN3+gvSA638OtfUQcwXXsOKc/hmVdfuy4oN7\nq5OSzMNj+VzX+0lP799BSn79+eMHzY3l1w8iXQXenvffYWD9y/N+xwy8vj5pTnph3venwF9W4vow\n6W7g16QKmnJOnzRE82PSPPxi0gXHjE+k52P0jhz3YlLns/bANp8iJeJZ51zycb6V1AF/lsrDXaSH\nsA6ZZr83kYbDl5DmAN81WI+V476ENAfU/7lV3u5Z+fMvJnVu57D84cnTyHOdU7z340gPGS4hPUzz\nHWDXyvqnk06S6j7Hk07CRcA/DKzbCHj2FO9z8FT1FlPMnY3wnldPV9csn9M/Ih+Xm1jx6f1nkK78\n7yRdmE4C36+sPzLvsxh4EWlO/4bpzrUp3v8CVnx6/2WkUaE7SEOan66se+CBsbz8wLcaePC5cDRw\nd2XbPYFf5GN08jTlfaZS3tbV9jNN3P830Naqc77nA8cO7HMVU3yTgXTuXzjDebMWaUToN6Q+oMfy\np/en7VcGjzuVfo6p5/CfnfdZTHqCvjqn/8H8/neSHhb8q6nqhQe31RXaA+k8/EWO92Oki+eX5XWv\nrLatKcqeqS+cMj5S3/Dz/PqtpCH1dfO6lwKXz3Dc7yddKFTr+NjK+p1JD8otzT8HH8ZdE7i02oZy\nPNeSzrWD82trkPrl7WaI5UjSebyIdBPw8IH178nH6i8GXn8YaeT4ZlLbf6DfZyDvDXm+z1TXS6g8\nZD1Q7umkm7X+sVxSPfZM0QeTbkgnpzsmg//6D+DNCUnfI91Rnj5nbzJPSPob0kNg012lWovy3c85\nEfH0adZvS+ro14gV5+HntTz0flpEPLLtWGYj6ZOkkcLvtB3LqiSp/+DhS2PYu7kxJOlppL+f8rK2\nY5nPFsy+idWVh/z/inR3ZgWKiBtJIwMzmas5+lUmz//tTRoCfhjpLuYrrQY1pIhYVX9IqXWSnkUa\nIf0jy+fWh3lmY2xFxEVMP11oQ5rrOf25G0aYJyQdQRpq/2ZutDZ/jUN7FunZmsWkYd8rSYnfyvIU\n0vTLraS/WHdQpAfczGqZ0+F9MzMzK0cxf3vfzMzM5paTvpmZWUc46ZuZmXWEk76ZmVlHOOmbmZl1\nhJO+mZlZRzjpm5mZdYSTvpmZWUc46ZuZmXWEk76ZmVlHOOmbmZl1hJO+mZlZRzjpm5mZdYSTvpmZ\nWUc46ZuZmXWEk76ZmVlHOOmbmZl1hJO+mZlZRzjpm5mZdYSTvhVF0qSkyVKWS4ihulxSLPNhuYQY\nporJrC2KiLZjMEPSZERMth1HlaReREy0HUdViccJyozL9Wf2YL7TN7MmTLQdgJnNzknfilDi3U9p\nd4mF67UdwKAS66/Edm7d4qRvZrU5mZnND076VoQSH3SS1Gs7hvnC9TecEo+TdYuTvpk1YaLtAMxs\ndk76VoQSh4dLnBMuWK/tAAaVWH8ltnPrFid9M6vNycxsfnDStyKUONdZ4pxwqVx/wynxOFm3OOmb\nWRMm2g7AzGbnpG9FKHF4uMQ54YL12g5gUIn1V2I7t25x0jez2pzMzOYHJ30rQolznSXOCZfK9Tec\nEo+TdYuTvpk1YaLtAMxsdk76VoQSh4dLnBMuWK/tAAaVWH8ltnPrFid9m/ckLRlYfqWkj7YYzwWS\n9ht47WhJp7QVU47hPkmXSrpC0mWSjpGkJsoeNZlJul/SGZXl1SXdJunrTcQ1qsqxuiz/fHub8Zg1\nxUnfilBzrjOGfG2l1JgT/gJwyMBrL8mvt2lpROwWETsC+wH7A8c1UXCN+lsK7Chprby8H7CwoZh6\nNXbvH6td888PNRTTZBPlmI3KSd+seV8GDpC0AEDStsAWEXFRu2EtFxGLgCOB1zdU5ESNfc8HDsy/\nHwKcVTua+hoZATErjZO+FaHmXOe6eQj2UkmXAe9rKKaJEfe7Hfgx6U4a0l3+uU3E1KSIuBZYTdJD\nGyiuN2oYwNnAIflu/wnAjxqIp+6c/joDw/sHNxTTZBPlmI1qQdsBmDVgWUTs1l+Q9ErgiS3GAymR\nvQT4Rv55eLvhTKvVOf287xWSHkG6y/9mUzHVtEKbMhsXvtO3IpQ411lzTvhrwL6SdgXWiYjLmomq\nOZIeBdwbEbc1UNZkzSK+DpxAg0P7/p6+2YP5Tt/GQQl3hiuIiKU56ZxOGXPUUDlOeUj/NKCpbzlM\njLhfP6bTgdsj4kpJezUTUi3FtSmzJjjpWxFqznXWflJ/ykLrf8/7LOArwIvrR9OItSVdCqwJ3AOc\nEREnNVR2b8T9AiAibgQ+1lAs5DInauzeP1YixfitiHhXAzFN1i3DrA5FzEl/aWZzQNKkE4eZjcpz\n+laEEuc6S5wTLpXrbzglHifrFid9M2vCRNsBmNnsnPStCCUOWZf4t9sL1ms7gEEl1l+J7dy6xUnf\nzGpzMjObH5z0rQglznWWOCdcKtffcEo8TtYtTvpm1oSJtgMws9k56VsRShweLnFOuGC9tgMYVGL9\nldjOrVuc9M2sNiczs/nBSd+KUOJcZ4lzwqVy/Q2nxONk3eKkb2ZNmGg7ADObnZO+FaHE4eES54QL\n1ms7gEEl1l+J7dy6xUnfzGpzMjObH/wf7lgt/TnKfqc/6nLDJmjmznMi/+xFxGSOdWKU5QZiKTmm\nB+Lq313359NXdrmJz1VZPgy4rm5METHRUDyDy7XPG19s2cpy0rexU+L/ROeYhlNiTGbjxMP7NrJS\nn0R20rAmlfgtALNROenb2Cn1YsSsSW7nNgonfRtZwXfUE20HYOOjxG8BmI3KSd/GUa/tAMzmWsEX\n3VYwJ30bWanDi+4MrUme07dx4qRvY6fUixGzJrmd2yic9G1kBd9RT7QdgI0Pz+nbOHHSt3HUazsA\ns7lW8EW3FcxJ30ZW6vCiO0Nrkuf0bZw46dvYKfVixKxJbuc2Cid9G1nBd9QTbQdg48Nz+jZOnPRt\nHPXaDsBsrhV80W0Fc9K3kZU6vOjO0JrkOX0bJ076NnZKvRgxa5LbuY3CSd9GVveOWtLzJd0vabuG\nQuqbGHXHHM8JleW3SHpvI1GNHtN9ki6V9DNJ/yVpzzbjyTEtaTuGqcxFXHXn9CVtLuksSb+S9BNJ\n/yrpMQ2FZ7ZSnPStTS8BLgQOabjcXo197wb+QtImDcXShKURsVtE7AK8Czi+7YCAaDuAaZQY11eB\nCyLisRHxJOCdwOZ1C/U0lo3CSd9GVmd4UdJ6wNOAv6LhpF+zM7wX+CRwTDPRNEKV3zcEFrcVSBfV\nmdOXtDfwfxHxqf5rEXF5RFzURGxmK8tJ39pyEPCtiLgaWCRp16YKrjnXGcApwMskrd9MRLWtk4f3\n/4d0QfJ3bQdkQ9sR+OlcFOw5fRuFk76NrOYd9SHA2fn3c4CX1g5ouYk6O0fEXcDngKMbiaa+ZXl4\nfwdgf+Bf2g6oS/w9fRsnC9oOwLpH0sbAPsCOkgJYnXSH/baG3qLXQBn/BFwKnN5AWY2JiEskbSZp\ns4hY1HY8NqsrgRfNRcGe07dR+E7fRlZjePFg4IyIeGREPCoitgWulfT0JuKq2Rkql3E7cC5wRBMx\n1fTAnL6k7Unn7e/aCyeF0vL7rzJ15vQj4gJgTUkPtCNJO0l6WhOxma0sJ31rw4tJTzRXfYWGHuhr\nYE6/78PAprT/RPjaeU7/MuAs4NCIaDumtt//QSStTvr2RWleAOwn6WpJlwMfAG6pW6jn9G0UHt63\nkY16Rx0R+07x2kdrB7TcxKg7RsQGld9vBR7SREB1RMQabccwqHqcCrIj8OumC607px8Rt5AudM1a\n5zt9G0e9tgOwVUvSUcCZwLvbjmVV8Zy+jcJJ30ZW6vCiO8PuiYhPRMSOEfHdpsv23963ceKkb2On\n1IsRsya5ndsonPRtZAXfUU+0HYCND39P38aJk76No17bAZjNtYIvuq1gTvo2slKHF90ZWpM8p2/j\nxEnfxk6pFyNmTXI7t1E46dvICr6jnmg7ABsfntO3ceKkb+Oo13YAZnOt4ItuK5iTvo2s1OFFd4bW\nJM/p2zhx0rexU+rFiFmT3M5tFE76NrKC76gn2g7Axofn9G2cOOnbOOq1HYDZXCv4otsKpvb/h06b\nr/pznf07oVKWKTPpT1BeXBM4pmEcBlzXdruebtlsZTjp29iRNFnaXZCkXmmdtGMaTontyWxUHt63\ncTTRdgBmc80P8tkonPRtZAV3Or22AxhU2t0rOCazLnLSt7HjoVjrArdzG4WTvo2s1E6nxBGIEv/A\ni2My6x4nfRtHE20HYDbXSry4tfI56dvICu50em0HMKjEuWrHZNY9Tvo2dkqddjBrktu5jcJJ30ZW\naqdT4ghEiXPVjsmse5z0bRxNtB2A2Vwr8eLWyuekbyMruNPptR3AoBLnqh2TWfc46dvYKXXawaxJ\nbuc2Cid9G1mpnU6JIxAlzlU7JrPucdK3cTTRdgBmc63Ei1srn5O+jaxOpyPpRElvrCx/S9InK8v/\nKOlNIxbfqxHXksrvB0j6X0lbj1pe36hz1ZKeL+kySZfmf5dJuk/Ss1uMaZNKTDdL+k1leUFLMW0l\n6RpJG+XljfPyNnXiaYKkd0u6QtLP8zF6UtsxWXfVOkHNargIOBj4iCQBmwHrV9Y/FRgp6decdggA\nSfsCJwPPioiFNcqrJSLOA87rL0t6NfDSiPj3FmNaDOya43kvcFdEnNhWPDmm30g6FfggcBRwPPDx\niLihzbgk7QkcAOwSEfdK2gRYs4myS51es7L5Tt9GVrPTuZiU2AEeD1wBLJG0oaQ1ge2BS0cpuOaw\npyQ9A/gEcGBEXFejrGqhvQbK2A54L/Dy2gHR2Py5GihjeWH1YjoZeLKko0lt68ONBFXPFsCiiLgX\n0gVTRNzSckzWYU761oqIuBm4R9JWpA76YuBHwFOA3YHL+x3lCCZqhLYW8FXg+RHxqxrlNCoPm58J\nvDkibmw7nhLl9vJ24CTg6Ii4r+WQAL4NbJOniU6R9GdNFew5fRuFk76NrIFO52LgaaSk/0Pgksry\nRTXK7dXY954c1xE1yniQBr5//vfAFRHxpQbCAcr8TnwDMR0A3ATsVD+a+iJiKbAbcCRwG3C2pEPb\njcq6zEnf2tQf4t+RNLx/CelO/yl53UhqTjvcB/wlsIekd9YopzGSJoAXAK9rOZSiSdoF2BfYEzhG\n0uYthwRAJN/P7fINwAsbKneyiXKsW5z0bWQNdDoXA88FFueO8XZgI2om/bpz+hHxR+BA4KWSDq9R\nVjWm3oj7bQycDhwaEcuaiKVuTHOpZkynkob1fwN8iALm9CVtJ+kxlZd2Aa5vKx4zJ31r0+XApqSh\n/eprd+QnxEc1UWPfAMgXIPsD75b03Brl1XUU8FDgtMpX9i6VdHCLMRUnf6vh+oi4IL90GrB9fiiz\nTQ8BPpe/svczYAdgsomCPadvo1BEtB2DzVOSJkscYiw1LpufSm1PpcZlZfOdvo0dd4TWBW7nNgon\nfRtZqZ1OicOeYzh/PidKjMlsnDjp2ziaaDsAs7lW4sWtlc9J30ZWcKfTazuAQWP6nfjGlRiT2Thx\n0rexU+q0g1mT3M5tFE76NrJSO50SRyBKnKt2TGbd46Rv42ii7QDM5lqJF7dWPid9G1nBnU6v7QAG\nlThX7ZjMusdJ38ZOqdMOZk1yO7dROOnbyErtdEocgShxrtoxmXWPk76No4m2AzCbayVe3Fr5nPRt\nZAV3Or22AxhU4ly1YzLrHid9GzulTjuYNcnt3Ebh/2XPRta/0+93Pg0tTwC9iJissUwDZfQqcfVy\nnBM1lh8BfLZuTDRrIv9s5Fg1tHwYcF3NY11dLjWmxs4bs5XhpG9FKPG/CZXUK224ucTjBGXG5foz\nezAP75tZEybaDsDMZuekb0Uo8e6ntLvEwvXaDmBQifVXYju3bnHSN7PanMzM5gcnfStCiV//8x+K\nGZ7rbzglHifrFid9M2vCRNsBmNnsnPStCCUOD5c4J1ywXtsBDCqx/kps59YtTvpmVpuTmdn84KRv\nRShxrrPEOeFSuf6GU+Jxsm5x0jezJky0HYCZzc5J34pQ4vBwiXPCBeu1HcCgEuuvxHZu3eKkb2a1\nOZmZzQ/IZFpdAAAHCElEQVRO+laEEuc6S5wTLpXrbzglHifrFid9M2vCRNsBmNnsnPStCCUOD5c4\nJ1ywXtsBDCqx/kps59YtTvo270la0nYMU5G0paTzJP1S0q8knSRpQUExXS3pI5LWqFvuqMlM0raS\nLh947ThJx9SNqQ5JfyLpzHyMfiLpIkkHtRmTWROc9K0INec6o6k4qhqYE/4K8JWI2A7YDlgf+EDd\nuGqqxvRYYF3ghLqFjmH9nQf0IuIxEfEk4CXAVg3ENFm3DLM6nPTN5oCkfYA/RMQZABERwJuBwyWt\nXVhMh0pat2bxEzX3L0Y+TndHxKf6r0XEwog4pcWwzBrhpG9FKHGus+ac8OOBnw6UtwS4HnhMjXLr\nmC6ma6kfU6/m/o2rUX+PBy5tMJQHlNjOrVuc9M1WLbUdwBRqx1QjmU03tD8nQ/6jkPQxST+T9KO2\nYzGry0nfilDiXGfNOeGrgN0HytsA2Bq4uka5dUwX0+bAL+oUXKP+fgdsMvDaJsCiOvFArfq7Enhi\nfyEiXg/sCzy0gZgm65ZhVoeTvo2D4u6eI+K7wDqSXg4gaXXgH4HPRMQfC4vpoxFxd83iJ0aMaSlw\nk6S9c0ybAM8GflAznpFFxAXAWpKOqry8XlvxmDVJ6Vkes/lL0r3ATaTkH8CJEXFyu1Glr8cBpwHb\nk2I7H3hrRNxTo8zJOvPCOaZTgR1Id65nR8RrRy2vibgkbZ9j2phUfx+KiLPrxlSHpM2Bk4E9gNuA\npcBpEfGlNuMyq8tJ32weqZv0B8raEzgLeEFE/KyJMs2sbB7etyKUONdZ4t9ub1JEXBIRj2wi4bv+\nhlPicbJucdI3syZMtB2Amc3OSd+KUOL3l0v82+0F67UdwKAS66/Edm7d4qRvZrU5mZnND076VoQS\n5zpLnBMuletvOCUeJ+sWJ30za8JE2wGY2eyc9K0IJQ4PlzgnXLBe2wEMKrH+Smzn1i1O+mZWm5OZ\n2fzgpG9FKHGus8Q54VK5/oZT4nGybnHSN7MmTLQdgJnNzknfilDi8HCJc8IF67UdwKAS66/Edm7d\n4qRvZrU5mZnND076VgRJk9X5zoaWe/3XRly+rjovnNfXWa4dE3BYaTH1y2ygjGr91f1cvVx/TcbU\naBs1a4P/lz0bO2rwf6JriqReacPNjmk4JbYns1H5Tt/MzKwjfKdvZmbWEb7TNzMz6wgnfRs7JT4s\nVegfium1HcOgQmOabDsGs6Y46ZuZmXWE5/TNzMw6wnf6ZmZmHeGkb2OnxDnYQueqe23HMKjQmCbb\njsGsKU76ZmZmHeE5fTMzs47wnb6ZmVlHOOnb2ClxDrbQuepe2zEMKjSmybZjMGuKk76ZmVlHeE7f\nzMysI3ynb5ZJulDScyrLB0s6v82Ychz3SbpU0uWSzpG0dkExXZZ/blNQTJdL+pqkDdqOyaw0Tvo2\ndmrMwb4GOFHSmpIeArwf+OuGYurV2H1pROwWETsB95DiLCWmXfPPGwqKaSfgduB1DcU02UQ5ZiVY\n0HYAZqWIiCslfR04FlgP+FxEXNduVA9yIbBT20EAajuAWfyQMo6TWVE8p29WIWld4FLgbmD3iLin\n5ZCQtCQi1pe0APgS8G8R8YmWY7oX+G9S8r8mIl7YZjywwnFaHTgL+HREfLvtuMxK4jt9s4qIWCbp\nHGBJCQk/W0fSpfn3C4F/bjOYbFlE7NZ2EAP6x2kr4CrgOy3HY1Ycz+nb2GlgDvb+/K8xNeeql+W5\n6t0i4uiIuLeAmOZEE8cJ2IY0AvH6hmKabKIcsxI46ZuVr8T582Jjiog/AkcDb5HkPs6swnP6ZgMk\nHUca3j+x7VgAJN0ZEUV9/Ww+xCTpa8C5EXFmi2GZFcVJ38zMrCM89GVjp8Q52DGcP58ThcY02XYM\nZk1x0jczM+sID++bmZl1hO/0zczMOsJJ38ZOiXOwhc5V99qOYVChMU22HYNZU5z0zczMOsJz+mZm\nZh3hO30zM7OOcNK3sVPiHGyhc9W9tmMYVGhMk23HYNYUJ30zM7OO8Jy+mZlZR/hO38zMrCOc9G3s\nSJqszsMWstwrIAbHVHPZbL7z8L6ZmVlH+E7fzMysI5z0zczMOsJJ38zMrCOc9M3MzDrCSd/MzKwj\nnPTNzMw6wknfzMysI5z0zczMOsJJ38zMrCOc9M3MzDrCSd/MzKwjnPTNzMw6wknfzMysI5z0zczM\nOsJJ38zMrCOc9M3MzDrCSd/MzKwjnPTNzMw6wknfzMysI5z0zczMOsJJ38zMrCOc9M3MzDrCSd/M\nzKwjnPTNzMw6wknfzMysI5z0zczMOsJJ38zMrCOc9M3MzDrCSd/MzKwjnPTNzMw6wknfzMysI5z0\nzczMOsJJ38zMrCOc9M3MzDrCSd/MzKwjnPTNzMw6wknfzMysI5z0zczMOuL/AaM4Rf+CUtIeAAAA\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nBXICYGZmViAnAGZmZgVyAmBmZlYgJwBmZmYFcgJgZmZWICcAZmZmBXICYGZmViAnAGZmZgVyAmBm\nZlYgJwBmZmYFcgJgZmZWICcAZmZmBXICYGZmViAnAGZmZgVyAmBmZlYgJwBmZmYFcgJgZmZWICcA\nZmZmBXICYGZmViAnAGZmZgVyAmBmZlYgJwBmZmYFcgJgZmZWICcAZmZmBXICYGZmViAnAGZmZgVy\nAmBmZlYgJwBmZmYFcgJgZmZWICcAZmZmBXICYGZmViAnAGZmZgVyAmBmZlYgJwBmZmYFcgJgZmZW\nICcAZmZmBXICYGZmViAnAGZmZgVyAmBmZlYgJwBmZmYFcgJgZmZWICcAZmZmBXICYGZmViAnAGZm\nZgVyAmBmZlYgJwBmZmYFcgJgZmZWICcAZmZmBXICYGZmViAnAGZmZgVyAmBmZlYgJwBmZmYFcgJg\nZmZWICcAZmZmBXICYGZmViAnAGZmZgVyAmBmZlYgJwBmZmYFcgJgZmZWICcAZmZmBXICYGZmViAn\nAGZmZgVyAmBmZlYgJwBmZmYFcgJgZmZWICcAZmZmBXICYEtJOr76uYHpluPN7nSTcRr+bi3HG+l4\nS6dteCgi5roMNiQkHR8RxzveaMZr0rgfS8ezEjgBMBsTTd7U/QAxG33uArA503Sz4LjHAyYajteY\ncT93jmdzwQmALVXAA2vc47UajtekCccb6Xg2hJwA2FxqOd7sGfMm+ZbjjW68Ma+bI8tjAMzGhMcA\nmFkdbgGwOTPu/ZAFdKk0ZtzPnePZXHACYEsV8MAa93ithuM1acLxRjqeDSEnADaXWo43e8a8Sb7l\neKMbb8zr5shyAmBL1blIJX1M0lGV6e9L+lxl+iOSjpnFeAsrn58m6TeSNu91+z7iLZZ0uaQrJf1S\n0q51Ys0g3tWSviVp7brx6rTgdMQ7U9JqdePVIWmJpA9Xpl8v6Z29bl/3ASLpbZKukXRV/p6PqbN9\nH/EWTr/WrMZbIun0yvSKkm6XdO5sx5N0oaSnVqYPlPS9OuW14eQEwPp1EfB4AEkCNgS2rix/PHDx\nVDuo2eUQeZu9gY8DT42IeTW2rxtvUUTsFBE7AG8FPlAn1gzibQvcAby6bjzqNetW490DHNlHvDru\nBp4taf1+Nq6Z3OwKPA3YISK2B54EDLKuQK6f/eoj3iJgG0mr5ul9qPEda8Y7EviYpFUkrQm8F3hV\n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\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 2min 24s, sys: 188 ms, total: 2min 25s\n", "Wall time: 2min 25s\n" ] } ], "source": [ "%time report(swaps=500, scorer=dissatisfaction)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Success! We were in fact able to make progress on the combined metric. If we could run 50,000 swaps instead of just 500, we could probably do even better. To do so would require either (1) more computers, (2) more patience, or (3) more efficient algorithms. I'll leave it up to you to make more progress.\n", "\n", "**Note**: Each time this notebook is run, different random results can occur. I'll record a keyboard found by one\n", "of the good runs (only 11% confusingness) here, just in case another run is not as good:" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ntBY92c7W9wcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_kbd(Keyboard((' U D J K N W ',\n", " 'T V H E B Q R',\n", " ' Z I M X A C ',\n", " 'S P G O F Y L')))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Bonus Question: What about the Keybee Keyboard?\n", "\n", "In December 2017 the [Keybee keyboard](http://keybee.it/) was announced, claiming to cut the path length in half. The keyboard uses hexagonal keys:\n", "\n", "![Keybee keyboard](http://keybee.it/img/phones/theme_002.png)\n", "\n", "Let's see if we can replicate it. I'll give `keyboard` optional arguments to scale the (x, y) positions to get the proper hex grid layout (even though I will still draw each key with a square around it rather than a hexagon; I'll leave it to you to fix that if you want):" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def Keyboard(rows, xscale=1/2, yscale=1):\n", " \"A keyboard is a {letter: location} map, e.g. {'Q':Point(0, 0), 'A': Point(0.5, 1)}.\"\n", " return {ch: Point(xscale * x, yscale * y) \n", " for (y, row) in enumerate(rows)\n", " for (x, ch) in enumerate(row)\n", " if ch != ' '}\n", "\n", "def HexKeyboard(rows): return Keyboard(rows, xscale=(3 ** 0.5)/2, yscale=1/2)\n", "\n", "keybee = HexKeyboard((\n", " ' Q W C ',\n", " 'J U I K',\n", " ' F H N ',\n", " 'Z O T G',\n", " ' R . Y ',\n", " 'B E S V',\n", " ' P A M ',\n", " \"X L D '\"))\n", "\n", "show_kbd(keybee, 'Keybee')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's not pretty, but the keys are in the right places. The path length of 1.9 is better than the 3.2 for the QWERTY layout, but not twice as good, and not as good as some of the layouts we were able to achieve with square keys, and the advantage may be due to the fact that the keys overlap by 13%, not because the layout is especially clever. Can we improve the layout?" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "report({'keybee': keybee})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This does indeed cut the path length to\n", "half of QWERTY, so maybe there is something to be said for hex grids. \n", "Note: the space key was moved to the edge, because it doesn't contribute to the workload.\n", "The Keybee FAQ says \"the space key is the most important key on a keyboard,\" so clearly they are aiming\n", "at two-thumb typing, not gesture typing; perhaps that's why it was so easy to improve their layout for our purposes.\n", "\n", "Here is Keybee with some word paths:" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_kbd(keybee, 'keybee', words=['FOUR', 'PLEASANT', 'THINGS'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Summary\n", "=====\n", " \n", " So where are we? Let's revisit our initial questions and see what answers we have:\n", " \n", " 1. What words have the longest path length?
**Answered**: \"PALEOMAGNETISMS\" etc.\n", " 2. What words have the highest ratio of path length to word length?
**Answered**: \"PALAPA\" etc.\n", " 3. What is the average segment length, over a typical typing work load?
**Answered**: 3.23 keys, for Qwerty keyboard, on our sample workload.\n", " 4. Is there a better keyboard layout to minimize the average segment length over a work load?
**Answered**: Yes, many layouts at around 1.9 on Qwerty; or 1.7 or 1.8 on more square keyboards.\n", " 5. How often are two words confused because they have similar paths?
**Answered**: On Qwerty, 26% of the words in a small dictionary, and 55% of the words in running text have at least one possible confusion. Other layouts are worse.\n", " 6. Is there a better keyboard layout to minimize confusion?
**Partially Answered**: We found a keyboard with less confusingness than Qwerty. The computation of confusingness takes too long to do very much hillclimbing search. \n", " 7. Is there a better keyboard layout to maximize overall user satisfaction?
**Partially Answered**: We defined a combined metric, and found\n", "a keyboard with a better score. There are no doubt better metrics, and better keyboards to be found.\n", " \n", "\n", "\n", "\n", "Going Beyond\n", "===\n", "\n", "Now it is your turn to answer the open questions, or make up some questions of your own. Good luck! Here are a few ideas to get you started:\n", "\n", "* Hillclimbing just keeps the one best keyboard it has found so far. Other optimization techniques such as\n", "[beam search](http://en.wikipedia.org/wiki/Beam_search) or [genetic algorithms](http://en.wikipedia.org/wiki/Genetic_algorithm) or [ant colony optimization](http://en.wikipedia.org/wiki/Ant_colony_optimization_algorithms) maintain several candidates at a time. Is that a good idea?\n", "\n", "* The code in this notebook emphasizes clarity, not efficiency. Can you modify the code (or perhaps port it to another language) and make it twice as efficient? 10 times? 100 times?\n", "\n", "* What other factors do you think are important to user satisfaction with a keyboard. Can you measure them?\n", "\n", "* Consider the 5 paths below. They all start at 'P', move in a straight line to 'T', and then go to 'S', but they all make different stops along the top row. In other words, the 5 paths all trace exacty the same lines, so they are very confusing, but our definition of `confusions` makes most of them different. Can you think\n", "of a better way to handle confusions for paths like this?" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdIAAAEKCAYAAACmDdR0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcVXX9x/HXh2Vg2BdJGTdcckncNTfMEaNSs2zRNBW3\n1Mz8mWZmRkpGamlqm6amFrlXmqlopTI/RdNK/ZmomSIgMooIg8AwMMB8fn98z4Uzd+6dueeeuXdm\nLu/n43EfzDn3e87n7J/zPd/vPZi7IyIiIsXp1dULICIi0pMpkYqIiKSgRCoiIpKCEqmIiEgKSqQi\nIiIpKJGKiIik0GEiNbPZZja+M4Oa2Ylm9mRnzjNh/OlmdkrKeWxuZkvNzDpruSQdM7vEzH6XoHyL\nmW1dymXKE/cgM5tX7rjdiZndamaLzeyZFPMYZ2avduZySfeUfc6UIi+l0ZU10h79A1Z3n+fuQ7zE\nP8Q1s6+Y2etR0p5mZqPbKTvczO4zs+XRgXZsEfH2MbO/mtkiM1tgZneb2SaljFmMdpJRkv1RlmMw\nT8IuOraZ/cjM3jKzD6JtfmE7ZQ8zsyfNrMHM6s3sRjMbWGzszmBm44BDgBp337fY+bj7DHffsfOW\nrPswszlmtiI675ea2SN5yt2SfXyZ2bfMbKGZvWRmO8XGH2Bm95Zj+UukqHPGzKrM7Fdm9q6ZvW9m\n9+e7jprZl81sWWy7N0bbd/f2YlT0o10z693Vy5CGmdUCPwSOAEYAc4A725nkOmAlMAo4HrjezNZd\naMxsUzPbKEec3WKDw4EbgC2jz3Lg1mJjlpCRPhGW62lCZyfsm4GPuPtQYH/geDM7Mk/ZIcAPgNHA\njsBmwJWdvDxJjQHmuPvKLl6O7syBw6Ob9SHu/qnsAmZ2ALA1seMruuk9mbCNfwVcEY3vDVwFnFP6\nRU+uxE/2vgHsA4wFaoAlwM9zFXT3O9x9cGa7A18DZrn7C+1GcPd2P8BsYHz0947Am8CXouHRwB+A\n94BZwNnR+I2BRmB4bD57ROV6AycCM6KVWQK8kokRm+/9wCLgv8BXYt/tDTwNNADzo3n0iX3fEq38\nf6MNADABeDWa5udAHXBKR+sei/dP4APgHeCqaPyWUaxewL7AMmBp9GkC3ozKGXAh8AawELgLGFZg\n7CuBX2RtlxZgqxxlBwCrgG1i434LXBYbPg94ARgaG/czoK6dZdgd+CDPd4XEbAD2zzN9R8fBSdG4\npdH2Oz0WdwWwJrbdNwEuAe6OlmEp8BKwRzvr1gJsHf1dRbjQzI3283VAv+i7g4B50fZbEB13J8Xm\nMwJ4IDpGniUkriej7/43irM8WqajOppfkg+wKfBv4PwCy38OeDE2/G3gz+2U3wz4I+HcXQj8LHZc\nTyLc3L0L/AYYknVuTIy253vARdF3pxDOj9XR9rgkOg6ebGffHAa8HJWfB5wX3y9Z16pvAi9Gx92d\nQFXs+wuAeuBt4NSsGLcCvwAejOL8ndh5BuwA/JVwTXoVOCr2Xb7lGxkdFw3RdP+bYL+uu+7m+b43\n8DwhOcTX46PA7dHf2wMzo7/PBy7MMZ/NgcXAZnniVAHXRsfo28A1QN/ou1eAw7KW6T1gt2h4X+Cp\naP1fAA6KlZ0OTCGc/42EG4KTyHG+x/b1W4Vun6x1uA64Imt/vVrgtI8D3+uwXKE7lJAI5wKHxk6k\nfwHfjTbgmGjlJ0TfPwicEZvP1cBPo79PJJxI/xNNezThQjos+v4JwsW1L7BrtHNqo+/2iA4WA7aI\nDuD/yToB/wIMBfpFB/NSwgWkN+HuZDVRIi3gQHoaOC76ewDw0djFYi3QK6t8H0KinhINnxPNY3S0\nPtcDd8TKvwgckyd2diLdNFq/I3KU3Q1YnjXuPOD+rHE/I1wkBhHuVp8nugDmWYZvAE/n+a6gmO3M\nu6Pj4FBgTPT3gYQTLnOStjqxonGXEBLsJ6Pj4zLg7+3Ej1+ArgH+FB03Awk3cj+MxVodzb93tFyN\nRDckhJujO6LjbUfgLeCJrDjxi3JH8zsW+L8Ott23CTcRLYTzrqbAbX5t/PjroGwv4P8INxj9CRfV\n/aPvTiHcrG5JOC/+CEyNnRsthCcbVcAuhKcW28f2e3z7tBqOxq2N7Zv6WNyh+Y4BwrXqGcKN/DDC\nRTlz8/WpaD47ROvyu6wYtxJuFPaM1vu2zHaK1u8two2BEa5JC4EdOli+ywgX8V7Rfj4gtqy/JHZu\n59j2swk3dAuAR4Bdsr7/FnB1juN4BOHGaijwdcKN5WbAP4hVOAr9AJcSrl8jo89TwPej774H3BYr\nezjwcuxa9T7wyWj4kGh4ZDQ8nXATtkO0ffqQ4HyndQXvAGBxO+uwJyFhj4725e3ATwpY9y0J5+mW\nHZYtYGazgcmEO60DY+M/Sng8Ey97IXBz9PfRwIzYCfkOsGfsxHk7a9pngeOinb4aGBD77jLgljzL\ndw7wx9hwC63vfE4gKxFE61JojbSOcMEbmWMj50qk1xO7wyeczAfHhkcDzdnT5Yl9COFEGgtUEy5M\na4ieCGSVHQfUZ437CvB4jrK3EG6KZgIj2om/C+FOOl+NsuCYeabPexzkKX8f65965Eukf40N7wg0\nthM/fgFaTutktx/rnyocRDipe8W+XxCdA72i/blt7Lsf0DaRbh0bzju/QrZb1jrsGq33wALKToj2\n5zYFznvfaLnaHKvAo8BXY8PbZY7r2LkxOmu/Hh3b7x0l0vi+mQOcBgzOKpPr4npsbPhHwHXR3zcT\n3RhFw9vQNpHeGPv+UOCV6O+jyapNEh6bfq+D5ft+dMwWtL2zpt2PcGPWn3BdfYf1Nf7NCTcxg/Ic\nX18CngMeisr+ETg4Wo+6aJkKvfF6gygZRsOfAGbHtuFSoH80fBswKfr7AuC3WfN6BDgh+ns6MLmD\n2HnPd5LVSIcQnk60RMfocxTwVJBwo1DQtazQNtIzgKfcPd7Tdktg06jn3WIzawC+A3wo+v5+YEcz\n2zLa+Evc/bnY9POzYswlPL+uIdxdrMj6blMAM/uwmT1gZu+Y2RJCG2J2u9/bsb9rCIkzLkmPyVMJ\nj0j+Y2bPmtnh+Qqa2RnAx4Avx0ZvCdyX2U6ExLqacNfcLnd/jHATcy/hkfqbhFrI2zmKLyccMHFD\no/LZXiVss/nRdLnWZVtgGuFAfjrPIiaJmU++4wAzO9TM/h51fGogXNzatPFmeTf29wqgv5m1e5yb\n2SjCnepzsf30MOEOPGORu7dkzXsQoW24N633SSHHV775JeLuLxJqe5e2V87M9iXciX/B3WcVOPvN\ngblZy5lRQ9hXGXMJtYr4cb0g9ndR6xf5AqG2Mzfqcd9eB6V8MbOvA/No20aefexkpt0S2DfrWvdl\n1q9rvuX7MaHJ669m9oaZfbujFc1w97+7+yp3X+nuVxCe1BwYfX0NcKm75zx33f1ud9/T3Q9n/dOA\nzJOFwwnNcT8pcFFqCLXxjLmEygDRcfQKcISZVQOfIRxjELbZ0Vnb7ABCE0xGq/OkyPO9ENcRbkqG\nE5423UdI6h05gdBk0aFCE+lXgS3M7OrYuHmEO/YR0We4uw919yMA3H0VcE+0MMcTHqXEbZo1vAXh\nEUk9MCKrZ+EWrL/gXk9IBNu4+zDCo+XsE8Jjf78TTR+3ebtrG5+R+yx3/7K7jyKcGH+IDppWzOxA\nwh3oZ7IO8LcIj8Pj22mgu79TYPzr3X07dx9NSKh9CDXJbP8F+pjZNrFxuxIefceX82uE/fkRQpve\nPWbWJ6vMlsDfCI9w7mhn8QqK2YGcx4GZVRFO+B8Do9x9OCG5Zfa103neJ1w4d4rtp2EeOvN0ZCHh\nKcFmsXEFH1+dpA+hjSmnqMfhnwjtsHUJ5juPcN7nuk7UEy6WGZnHYAtylO1II+FGBljXYWbd/nX3\n59z9SMJNy/2E60pS79B6H21B4cfQPEI/gvg5PMTdv97e8rl7o7uf7+7bEJLMeWZ2cBHLTrSsmWP/\nEODKqDKRuY783cyOiU9gZv0JFY1vAh8m1OgaCX0+di4w7nza7uf62PBdhJuKzxIe686Oxs8jPOqP\nb7PB7h7v6LZu+xdwvqexK3Cru3/g7qsJzYYfNbMR+SaIOnKNJtTmO1RoIl1GaGP4mJldHo37B7DM\nzC4ws/5m1tvMdjKzvWLT/Y7QgHwEbRPpxmZ2tpn1MbOjCM/KH3L3twnP5C83s35mtguhVpiZfjCw\n1N1XmNkOwJkdLPtDwEfM7MhoGc+hgNpghpkdF+vp+gFh52fu0C0qszmhLWJijrv9G4DLzGyLqOwo\nM/tMgbH7ZbqvR9PfCFzr7h9kl41q8PcCl5rZAAs/MWi13c3seELb2iHuPpdwAhjhkUymzKbAY8DP\n3f2m9pavwJgtZvaxdmbzoVzHAaFtrQp4391bzOxQwpONjAXASDPLrhFn6/BE9PAc5ybg2qh2munh\n/In2p4SotnYvMNnMqqNjcmJWsXdpJ9ElYcHpZjYsGv4ocBbhUWuu8mMJF6Sz3X1aju8vMbPH84T7\nByEBXRHt335mtn/03Z3AuWY2xswGES7Yd8Vqr0kugC8CO5nZLmbWj/CoOrN8fS38JGGIu68lXIvW\nJph3xj3AyWa2g5kNIHSUKtSDwHZmdnx0nPY1s72ieeVdPjM7PHaTuYxww5Wrdt+Khd+o7x/Nu5+Z\nfYv17ZMQkuKu0SfT4/7ThJpW3CRCAnmXcEO/vZl9iNDn5c0o1pbROZpd2ci4C5hkZhtF18Hv0fpa\nfhfhvDyT0E8g4zZCTfUTZtYryhEHmVlNnjgdne9p/BOYaGZDzKwv4XyZ7+6L25nmREKTYWNBEQp4\nTvwm6xt1hxN6X2UamzchbLx3CG0vT5P13JpQa5meNe5E4ElCx5clwH8IF/fM9zWE3m6LgNeB02Lf\nHUiokS4l9IicTOv2lnXtHrFxnwBeI/Qe+xnh+Xy8s9FS8nc2+h3hop3pBXpENH5dG2m0PmtY32t3\nGfBSVM4IHXb+Q0jErxN1RIq+n0msXScr9lDCRWYZ4S5wCmCx779DuPnIDA8nnEzLCe02X8qa327A\ndlnj+gKfiw1fHK1XfF2WFhMz2rZLiPXeTngcnElIQosJPXHvIDzSynz/a0JtcjHre+1OjX2/bh/l\niR9vI6siJINZ0bK8DHzdc7TP5DgvNiJcbJcQ2gIvB/4WK3t6tP8WA18sYH5fzhw/OZbZCInx/Wj/\n/Af4dlaZZUQdWwjt4ZljcxmxYzO2DX/Qzvm/WbR/3yd0+rs2thyTCBfoBdH+yXSWarPdCb0fM+dc\nrjbR7xBq95kbvLWEm4++0fouim3f/XLtl/g2jIazj4dvE65VbxOaq9YCm0bf3Zp1bGXP+8PRPs70\nXn6U8Ni0veX7BqEtb1m0nS6Kze96ovbbHNv8I6w/7xcSng7t3s4+ynXN2z5alvj14pvR/GYSnr5A\nuJ6+CfTOM+9+hA5q9YTa6TXEekJHZR4l9N7/UNb4vQltsouiY+QBouts/Hgo5Hxvb18T+mosbWf7\njCAk9gXRvJ8A9op93+oaHK3zYqIOroV8LJqwZMzsMUJ37FtKGki6HTM7jvB7x+/m+f5E4FR3b6/G\n2uOY2RXAxu5+clcvS0fM7HnCzUtDVy9LOUVPDl4i/MSpw1pipTKz7wLveQdPn6R9fTouUjwz25vw\nO8SCHmVKZXH32zsu1fOZ2faEu/SXoketpxJ+HtLtufseXb0M5WLhpRXTCB1OfkToXb/BJlEAd/9h\nVy9DJSjZm43M7DeEHzCf44U+ZxbpmQYD95rZckLb4ZXu/kAXL5O0dQbh0ezrhI5RX+vaxZFKUfJH\nuyIiIpWsot+1KyIiUmpKpCIiIikokYqIiKSgRCoiIpKCEqmIiEgKSqQiIiIpKJGKiIikoEQqIiKS\nghKpiIhICkqkIiIiKSiRioiIpKBEKiIikoISqYiISApKpCIiIikokYqIiKSgRCoiIpKCEqmIiEgK\nSqQiIiIpKJGKiIikoEQqIiKSghKpiIhICkqkIiIiKSiRioiIpKBEKiIikoISqYiISApKpCIiIiko\nkYqIiKSgRCoiIpKCEqmIiEgKSqQiIiIpKJGKiIikoEQqIiKSghKpiIhICkqkIiIiKSiRioiIpKBE\nKiIikoISqYiISApKpCIiIikokYqIiKSgRCoiIpKCEqmIiEgKSqQiIiIpKJGKiIikoEQqIiKSghKp\niIhICkqkIiIiKSiRioiIpKBEKiIikoISqYiISApKpCIiIikokYqIiKSgRCoiIpKCEqmIiEgKSqQi\nIiIpKJGKiIikoEQqIiKSghKpiIhICkqkIiIiKSiRioiIpKBEKiIikoISqYiISApKpCIiIikokYqI\niKSgRCoiIpKCEqmIiEgKSqQiIiIpKJGKiIikoEQqIiKSghKpiIhICkqkIiIiKSiR9jBmNjn+dxmG\n68ocb3I545R53eoUT/G6cbx1w5KMuXtXL4MkYGaT3X1ypcYrp0rfloqneFIeSqTSrZTz4qELlYh0\nBj3alXZ1weOe2jLHK5tyb0vFU7zuHK+SKJH2MBtAYqsrc7xyqlU8xevG8aRISqTSkbpyBqvwR611\niqd43TVehZ97JaU2UulWNtQ20qr+Nq5mDFOHD2dYQwNL6ucwsXmlz8hVdojZuLEwdRMY9i4smQkT\nl3rusvlYPxvDxkxhEDUsp54FTPJVPqcz1iVtvCFmY8bClNFQ8w7Uz4RJS73wZUuyLTtDObelmb0K\nbFZVxYA+fbE1q/HmZlYAb7v7jlllbwR2qYatqqCqGZqbYDbwb3c/vRTLt8Fyd330yfsBJpc5Xl0F\nr1vOeH37MW7ceJqnTcOnT8enTcPHjae5bz/GZZcdDOOOh+bl4A6+HPx4aB5M27L54lHFGHbhDS7C\nmYxzEc4uvEEVY0qxfkniDYYxx8MbWev3xmDals0VL8m27Iz1K9W2zBsPlgGe47MsR9ln8pR9pjuc\nD5X0UY20h+mCLvh17l5bxnhlW7/usi232tFmX3c1Y6qr149raoIbb6Xl0xNZES/bdz4Dd1yLxdtk\nWoDXgc2raImXdaeXWetxAL4W895Ym+Vbi1tvir4gdEa8hWuwzVvart+8XvioPq3L5op3yzTs6NOw\n7G15z034KYcVv2754pVqW+aLd9SF9FqwqG3ZTargnWaejY/bFPaoh77ZZavhvRXuG7dZ5m70hKan\n6dPVCyDdXl05g1X4iVwXHzhjqh20aTWX77dn6yQKUF0N7y1i5QtL+AbA6HcZcsgM9r/ndT7/WW97\n4f5NL1buN4Gr4+P+9QYH7rUtT2aXffw1vrxsF8Zkjx/8b+aO3547ilmxzor3wgy+fHFj27J3DmTu\nHuNal80Vb34D51VX0z8+rroa5i9m1dyXW2+fpHLFK9W2zBdvVTMX5Sq7og/QHI6VdWXhb+RIpFVQ\nlWseFX7ulZRqpBXOzDYFfgl8hNC5bBrwTXdf3clxrgbmuPvPouFHgLc8aosxs6sI7TjXdjCfgu+K\nzWwt8CJghEdWd7n7jxMsc6I78Fi8vsCbwAnuvrTQ6QFO/o1VD6/i0m0HcfKm1YyY+QEv3HE5m141\nhY3jyfS99+D4E2ge0MxbvWCzauhXBQ0LYfB86Ds0Ns9GYALMftp964LWYwu7jRM4rtXltBn4MQtZ\nw0R3fyRa36OAk939sCTrWHC8m/kTC9jW3XfOjN7Y7MVzYZcLY0Wj9bv9affjO4o1Zgd78/pr2Cq7\nRnrmucye+xqj3H1wmnXJlnfdfsftzOPbrD/3DHgQ+Ja7ryk2Xr9+tra5OW8n0RcIx+YrwInVMLcJ\nPpRdKF+NVIqnXruV717gXnffDvgwMAC4stCJE/zc5ilg/2gaAzYCdop9vz/wdAHzqS102YBGd9/D\n3XeP/i04iRYpE29noAE4q9AJz5hqB513nc37TA3LdxjMabMbufv+eoZ/94u+5+sv88XLrmJ1U1Mo\n29QEv7uOtS82s2AJNB0Aj62ESbPdR/aC8V+H1Y2ZBQK+CqtnwsTsmHn33QIm8SCzaI6Gm4EHmUUL\nxwFXm1mVmQ0Cfgh8rdB1TBxvIVdB1qNdePwuWJS1frNmwqRC4tXPYWL2trzsKlbXz2Fidqykcq5f\nvnVbwCRan3vbAYOBy9LEizoW5RQ7NlcDX406FrWRb7x+R1o8PdrtYRLW2MYDTe4+FcDd3czOBeaa\n2UXunvekjKktcNGeBq6J/t4JmAlsYmZDgSZgB+D5AuZTV2A8oO0jzjL6O7BzewXitc/DRjNi+is0\n/mUBn/7VCf5wvFzzSp8xuL+Nv3Quv996MCM3XkjvC+p5ZEeYAjz7IFwMrARY6j5jiNn4WYX12q3N\ntVy+yudYP/s4DVk9Tdf6HDP7M3AhMBD4rSfoLZs0Hi1tE5vDkn/D9RNgq02g5t32e+22ide80mdU\n9bfxZ85v22s33N+l0iZe3nVrZmtyn3uzzexid19ZTDzgbXL32h0QK/Mk4dj8N0CuXrtJVlo6pkRa\n2XYCnouPcPdlZjYb2JbCTqi6QgK5+ztmttrMNmN97XNTYD9gKfBSIY+0ErbTVJvZ86x/tHu5u/8+\nwfRJGYCZ9QYOAX6dq1Cm7fMzNeyzcBXLXl/O7f9q4KJbv8G57q2TKGYfAk5aBqcxi4WE5Hk77kti\nZVpNEiXNQh7j1uX7Ivp5Rq5HpZcSbnhWAXsVEKPoeGa2Zc6y0PC0+/eKjRf91KWgx9wJ5YyXZ92O\nIPe5N5dw7s0sJp5n/cQlFm9Z9G8f4FDgYXe/oYAY8XlPTlJe1lMi7WE66WAv+NY8YbyngQMIifQn\nwGbR8AeER78dL1iydssV7r5HguVLK5O4NyO0Q/0t80V27XPmB7yQXfu85UQmA2DWCzgYOB34JOER\n4AnAs5nfIXSGYo4Vd19hZncTfk6RqB29iHj51rWgbVDuC383P/cyxyaEGunNSRZK0lEbaWV7haxa\nhZkNATYGXitkBgnbTZ4mJNGxhDvuZwg10v0orH0Uuvdr0TKJewvCBfHrZ0y1gy79vT2dq+0z+xHu\njmZXYnYBYdtfAzwBjMH9FNyf6cwkCqnavFqiT6njLQJGZI0bAbxfonipJIyX79zbHHijBPFWRG2k\ne7j7OcV0aFIbafGUSHuYJAe7uz9GuFM9Ppq2N3AV8HN3X1XgbGoTLN7TwKeBxR40AMNIlkjrEsQr\ndxupAZx0K/bZbzJ7+EZc+6mNmd7b6PeXBXz69CN82JXH+lm3nOgfrJ/CemF2CGZ3/wPOJbQVnwDs\nivsvWz3C7Xy1JZx36nju3gjUm9nBAGY2glBDL/QtRInikf54KTheO+ferQW2jyaKR9f2F9jg6dFu\n5fsccJ2ZXQyMIvxE5IoE09clKPsSMBK4LWvcAHdfXMgMEj7O6p/VRvqIu+f8nV1nsF70imqf+ywc\nybJn7mPucV/ishVLvG1badT2CZxG6Gx1w1iYPdf9wjZlgSobNK6GbaYOZ+SwBhYtqWfWxGZfnjOh\n2MCBY9hqqymMGFHD4sX1zJ49yRsb5+QoWlfkqhYrbzyzIWNg7BQYXQPv1MPMSe5L5xB6G18X/XzK\ngckMGOA2duxtJVi/tDX+nPHa2XefA66Pzj0j/PTsu2nirXtFIP0G9KGPrWGNN7Mqu7NRpuyNwC70\n67cVffpUsWZNM6tW5X1FoNpIU+jqVyvpU74PsC+h195uXb0s7Szj5O4U66RbqT73dq785f28/6e/\n0jLl9zx3xlQOzVkeejkc4nC3wxKHWxz29ej32vk+fRk4bhyfbJ7GNJ/OdJ/GNB/HJ5v7MrDta/8G\nDBjDhAlvMG2aM326M22aM2HCGwwYMKar913+7Tx4DBz/Biz38Oa/5R6GB7dZ5p62fkn2XScdsyV7\nRaA+xX/0QgZpV3d5jV6JYuVdt0zP252Hru95u6iZi1o9tl0/oza1T7J73rYTb4zt+ub1XLFVNevf\nItBEEz/l5tWH8L258bLLBjy/8ar9Nx9Mn9jDpDVr6P3K3NV9Ru3QFC+7tmV1v969+hb6CD+1fPHW\ntCypXusj+rZuSWqhty1e3afXsFbLvGbhf6rXfmTLvj1l/Z6dc/2gb3xwXK/sfXft0Ntb9hlz5vLO\njvfzmUcOWbK2bRNyVfVwmqfd+5tWIz//+WNoaOjfpnC/fu/5ypV6RWAn0qPdHqYLDvbaMsaCLvz/\nSAvpebtOcT1va+MDp9js4SNZdfme7DQmfiEGqKaaZla3LKTfEwDey61hlxWbvdPr7c1a9tgqa7Z9\n6Dt/fuOIgbu+FB+7uHHOLiMGbl+23wzmi7e48f2dV6/dZlj2+L69XmscMXDj1svcPH/n1Xtkl+2+\n67d6TfN+1VS36mtSTTXNa1a1vDWw34udHc9bWg7MVbZPcwvNofNarLAfnXPGffrkfEWgFE+JVDpS\nV85gXXFHnO93nwlqn2dk1z7zqAM402Z9ZnNWfP9IPth1HgMW1bHwgyaahmXXat5kTv306e9OBk6N\nPm/zwydeoHav/ch+B95D9zzkT12c9VvGvcv8NCF3PLP/uQ2+eFx4x0NGI3DKQ+5Pt17msSfdRu3e\nx/WU9Rtjr73ZRFObpwmzG/87b/pTe32ss+P1s8a15Ogkumbtyhavrb211fRNTVeQo+2UNWua24xD\nbaRp6NGudCvlqnGf/BurXvIyj044kO0z77yd18SkBLXPG0nwu89M7XM7lh87klWDXmLoU/OpvuhG\n32ZGlQ0atw/jHr+Ic/pWU00TTVzW77o1T13z6Wd9x+13BO4EbvTa2n/bwIFjOOCARzn33G2org5J\n5pprZvHUUx/P0yGny4WORp99FH61TUimjcBXZ8H9H486HK0v28PWL+e+46ern2XG+HydxdKIXrww\nKMdXyz3rPcJm9gywT46yz7r7vp29bBsyJVJpV6W1kcbbPuuXs3rOKm5O2/bZnkztcywf7DoLa5rH\nqJ810PfSW32rVu19VTZoXE3/He8YOmyzUYs+PKDP/ImHvMa2W/8EuMdraxvjZQvttdsF+y5vvPW9\ndjepgXfjvXbblu1h65ekx3XaeO302s37H3sX2mtXbaTFUyLtYSotseWI1+nrl+t/XJnXxKQbJrJP\nm1glrH384FM6AAAQV0lEQVTexLZTsrel1dVlXul2OuFlFutqn+nWukv2neL17HhKpEVSG6l0pK6c\nwTrzRO6o7fOGibb+sVe6tk+gbdvnqwy5Ll77vMnWb0urq9uceNtnSNbHZNc+U6rrsETnUrweHE9J\ntHiqkUq3kvauOF/tM1fbZx+z768JPR1L0vbZZt1KWPsUka6jRCrt6imPkov53ef78O2NYD4p2z7n\nMWDRLAb9OlfbJ8Rqn8uXn8ugQa8QknWbts/O1l3aEBVP8SpeV78RQp9kH2AysTfyFDqcGRf9XZdg\nuC5h+cxwXanjnXQr1Ueez1M/uZPV9/0F/9avqN92X/6dc1rodSb89mF4bwWsdLhlAjxv0XLGY+cb\n7s/IGUdw9fzreGrlH5mx9hwenrs5B72QKx7Tp/fhmGPu4Npr3+fhh1cwffov2Gmnf3bXbal4FRUv\nPpzoWtHV17ee+lGNdANRSXe3pXjrUHuya59/5Zn/jODQT7Rb+2zd9pmq9llJ+07xpBIpkUqP0FHb\nZ6uLVYl/95l9YVTbp8iGTb12pSQ66y48wVuHasvR8zauTD1vK74GpXg9O54okW4wetI7eot55+0/\nYCPgvxT2zttW4rXPCVHt80FGfyxvz9tjjtnO6uoeYH3t8/AS1z5rSzhvxau8eFJmSqRSKnVJJ0jz\nztu94XqKbPtMXPv87GcBLqYEtc886soQQ/EqJJ5qo+WnNlIpq6r+Nq5mDFOHD2dYQwNLPviA007+\nCZ/K1fY5xGzMWJgyGmregfr/wvfeh63J0fZpcEkhF5DO+N0nBx/8eV2sRCRDNVIpiVyPkqv627h9\nDuDxi86nb/Q+8uE338KjI5eyfLYxNV77HGI25rPw6K9gm8xrzifB0a/DrA/DL8hu+zSrbW95OrPt\n0+DzKTZNYpXexqZ4PTueKJFuMLpDG2nNGKZmkihAdTWcegqceS4L5/zHz4qXHQtTMkkUwv8ZMgX6\nToDnnnb/ZY54ddkjErd9tq19lrrts1C1iqd40n0pkUqp1GWPGD6cYdWt//9qqqvD+Oyyo6FmYNa4\ngcAmUJMrWPwmoTv2vE2pTvEUr1CqjZafEukGIunJZWZHEtogd3D3/3ZGvIYGljQ1MTz7/2xuaGCJ\nmX0XOBZYC6zdARY00va/gn4X6nPFG2ybX/FV/jasoNqn2VoGDZrDoEGjGDBgADvv/AxnnXW4T5hQ\nktqnma0FXgQMcOBId3+r0OmL2HcfAq4h/F+UDUAz8GN3v79E8ZZ57P/CNLMTgb3c/exyxEsqSbx4\nLDM7DLgamODu80odT3qONv/TukjkGOBJQnJLzMwmZ4+rn8PEy65idVNUL2xqgsuuYvW8N7gCOAzY\nzd13BT4+Gy7+KszKVAsbga/CrJkwKT7PM23WZy6zl164jTu+PYYVX3iVIdc9QM2gS3xsmyRqdXWb\nW13dZKqrjQceeI877zyHLbbYmvvvb+ITnyhlu2eju+/h7rtH/xacRCH3tuzAnwivpdvW3fcm7MvN\nShgvV4/FgnsxdlK8giWM59E0hwDXAp9KkkSLjZdGEdtTUlKNdAORpI3UzAYCBxDeDvQg8P0iQtZm\nj2he6TOq+tv4M+ev77VbP4eJLWsZBbzv7msA3H0xsHiI2cdnwZRNoOZdqJ8Jk5a6z8nV9nkBP731\nNf/DKW3WJVfb58qVK7y2dr+wlLWY2enAPwnvHi0FSzl9bcGBzMYDq9z9psy46MKfq105dbxO0p3j\nmZkdSHi5x6HuPqfE8aQHUiKVXD4LPOLub5jZ+2a2u7u/kHAedblGNq/0GYSfsKwTJe6Lzew/wGPA\n3e7+xNJw0To+Uy6qfd6Xq+3zEv7QKk57bZ/mPjFe1t1nm1kvMxvl7gsTrmchqs3seUJCfdPdv5Bw\n+roEZXcCnk84/zTxAAZE6wdhHYcDfy5hvLSSxOsH3AfUuvvrZYiXmtpIy0+/I5U2zOwB4Fp3f8zM\nzga2cPdvlTimAQcC4wm1xwvdfWqhv/s0s8lMnz6FAt55a2ZL3X1I1rgGYLtCEmnSHtC54pVKtL/G\nuPs3o+FfAOMItdR92p24+Jit1i9qI93T3f+nHPFKycwaCTd3b7r7N8oQr2zrJp1HbaTSipkNJySz\nX5vZm8D5wFFFzGdykvIePBElqLMHUXPWZfbSC0cyf1EhbZ+cffZJwGzgIkInqS28tvbrhfx8xcy2\nBtaUqDaaWsJt+TKwZ2bA3b8OHAKMKlG81Lp5vLXA0cBHzew7ZYiXmtpIy0+PdjcQCWpRRwFT3f3M\n2LTTzWycu7fpAduO2gTLth3QcjJvLhrJqss/xUknGcuqVmMzCv7d5xZbzAK+UuDvPte1WZrZKMLr\nBX9e6PIWoWxtpO7+uJn90MzOcPcbotHZvyTqtHiRsq1fJ0kSz9x9pZkdDjxhZgvc/ZZSxks4b+kG\nlEgl25eAH2WNu5fQezdJIq3LNbLKBo2rYZupwxk5rIFFS+qZNXE/LtprDvdOeYxDBq6m19oWqt/o\nR834hwfsU8VWW0256WMjLmXx4npmz57EQw+tJVfb5/nnJ/ndZ/+oTa8KWE24cbgmwfRJpW0/qUtY\n/kjgWjO7AFhI6PR8QQnjlW39zKw3sKpc8YjWzd0bzOxQ4H/N7D13f7BE8arN7C3W/1Tqane/NsH0\naiPtAmojlbKpskHj9mHc4xdxTt9qqmmiiRu5mU9yVMsCdmrV9mkDB47hgAMe5dxztyF6nyA33bSC\no45qZvTo28lq+yznm5v0CrauY2a7Aje4+75dvSwiGWojlZLI1U5TwzZTM0kUoJpqTudUfsTlb7Vp\n+9xqqynrkiiEVyCddtoArrjikTxtn7UlWpUuV+ltbIXGM7MzgNuB75YjXmep9HiiRLrB6IKTqzZ7\nxHBGDssk0YxqqhnGiKFtph4xooZc7xMcOnTjPPHqilzOnqBW8cDdb3D3se7+WDnidaJyx5MyUyKV\nUqnLHtHAoiVNtH7dbRNNNLCo7f8hunhxPU1Zr8Ztagrjc6jwR611iqd4harwc6FbUhuplE2uNtLL\n+OnqZ5kxvtmXt/5JS6420muumcVTT33cGxvnZM9bbaQi0lXUa1dKIleyafblM6ps0PgzeadVr93s\nJArgjY1zbODAj1NfP4URI2oyvXZzJdFIbeevRfdQ6f+fpeL17HiiRLrB6A7/HymEZErWKwLziZLm\n8R2Vi9QVWK4nqlU8xZPuS22kUip15QxW4XfgdYqneIWq8HOhW1IbqVQEtZGKSFdRjVRKojv83KZS\nVPrvEBWvZ8cTwN312QA+hP9rc3IZh+dkhqPv6ko8PKcMMerKtC7Zw0sUr0fHm5MZLte52NXXmw3t\no0e7UhKV/Piz0nthKp5IMkqkUhHURioiXUVtpFIpart6AUql0tvYFE96OiVSKYkuuHjUlTleOdUq\nXo+OJxVOiVQqQoU/aq1TvJ4br8KPTUFtpFIh1EYqIl1FNVKpFLVdvQClUulteoonPZ0SqZSE2kg7\nVa3i9eh4UuGUSKUiVPij1jrF67nxKvzYFJRIpUSSXDzM7Egze8HMno8+L5jZWjP7ZIJ5FBTPzDYz\nszfNbFg0PDwa3qLQWEmZ2cZmdqeZvW5m/zSzB81s20KnT7gtHzezCVnjzjGzX5YiXjT/tdF++z8z\n+5eZ7Ztk+iLitZjZlbHhb5rZxaWIF8WaGhvubWYLzezPBS+wVDwlUuly7v4nd9/d3fdw9z2A64An\n3P0vCWZTW2Cst6P5/ygadQXwK3d/K8kyJ3Qf8Li7f9jd9wa+A2xc6MQJH5PfARybNe6YaHwp4gE0\nRvtuN+AiwjYtWBHxVgGfN7MRCacrJl4jMNbM+kXDE4B5JYwnPZASqZREsRcPM9sOuJjC/x/SjLoE\nZa8F9jGzc4D9gZ8kjFUwMzsYaHb3mzLj3P0ld38qwWxqE5T9I3CYmfWJ4m8JjC5hPACL/T0UWJxw\n+qTx1gA3AuclnK7YeNOAw6O/jwXuLDKuVCglUuk2oov/7cC57j4/ybRJHte5+xrgAuAa4Bx3X5sk\nVkJjgedSzqOu0ILu3gD8Azg0GnUMcE+p4kWqo0e7rxIS3A9KHM+BXwLHmdnghNMmjefAXcCxUa10\nF+DZJMHURlr5lEilJIq8eEwBZrr7H5JOWEQN+DCgHtg5aaxyK2Jb3kVIoET/JqpBFRFvRfRod0dC\nAv9diePh7suB3wLnFDFtonjuPhMYQ6iNPkTrGriIEql0D2ZWC3wOOKvIWdQmiLUbcAiwL3CemRXc\nXlmEl4G90sygiJuE+4FDzGx3oNrdXyhxvHXc/RlgIzPbqAzxfgqcCgxIMlGR8f4MXEkRj3XVRlr5\nlEilJJJcPMxsOHALMNHdVxQZsi5B2esIj3TfBn5MCdtI3f1xoMrMvpIZZ2Y7m9kBCWZTmzBmI2F7\n3EJx7XmJ4hGroZnZDoTryqJSx4seY98DfKX94qniZdbtFuD77v5ywliyAVAile7gDGAUcH3s5y/P\nm9lRhc6g0Md1ZnYaMDdKcADXAzuY2YFJFzqBzwETzOwNM3sJuAx4N8H0dUXEvJPQnldMIk0ar39m\nv0XxJnqyd48mjRef90+AkVnjOjOeA7j7fHf/RYLp1s9AbaQVT+/alYqgd+2KSFdRjVQqRW1XL0Cp\nVPq7YRVPejolUikJvWu3U9UqXo+OJxVOiVQqQoU/aq1TvJ4br8KPTUFtpFIh1EYqIl1FNVKpFLVd\nvQClUulteoonPZ0SqZSE2kg7Va3i9eh4UuGUSKUiVPij1jrF67nxKvzYFNRGKhVCbaQi0lVUI5VK\nUdvVC1Aqld6mp3jS0ymRSkmY2eT4BaTUw5lx5YxfxnWrVbweHU8qnB7tioiIpKAaqYiISApKpCIi\nIikokYqIiKSgRCoiIpKCEqmIiEgKSqQiIiIpKJGKiIikoEQqIiKSghKpiIhICkqkIiIiKSiRioiI\npKBEKiIikoISqYiISApKpCIiIikokYqIiKSgRCoiIpKCEqmIiEgKSqQiIiIpKJGKiIikoEQqIiKS\nghKpiIhICkqkIiIiKSiRioiIpKBEKiIikoISqYiISApKpCIiIikokYqIiKSgRCoiIpKCEqmIiEgK\nSqQiIiIpKJGKiIikoEQqIiKSghKpiIhICkqkIiIiKSiRioiIpKBEKiIikoISqYiISApKpCIiIiko\nkYqIiKSgRCoiIpKCEqmIiEgKSqQiIiIpKJGKiIikoEQqIiKSghKpiIhICkqkIiIiKSiRioiIpKBE\nKiIikoISqYiISApKpCIiIikokYqIiKSgRCoiIpKCEqmIiEgKSqQiIiIpKJGKiIikoEQqIiKSghKp\niIhICkqkIiIiKSiRioiIpKBEKiIikoISqYiISApKpCIiIikokYqIiKSgRCoiIpKCEqmIiEgKSqQi\nIiIpKJGKiIikoEQqIiKSghKpiIhICkqkIiIiKSiRioiIpKBEKiIikoISqYiISApKpCIiIikokYqI\niKSgRCoiIpKCEqmIiEgKSqQiIiIpKJGKiIikoEQqIiKSghKpiIhICkqkIiIiKSiRioiIpKBEKiIi\nkoISqYiISApKpCIiIikokYqIiKSgRCoiIpKCEqmIiEgK/w+5SVg7zmNpRQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_kbd(qwerty, words=['POUTS', 'POIUYTS', 'PUTTS', 'PUTS', 'POTS', 'PITS'])" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.3" } }, "nbformat": 4, "nbformat_minor": 1 }