{ "cells": [ { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import json\n", "import re\n", "import tqdm\n", "from IPython.display import Markdown" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## prepare raw wikiextract" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "%%bash\n", "cat english.words| jq -s . > english.json" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "with open('english.json', 'r') as f:\n", " english_vocab_db = json.load(f)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "1023195" ] }, "metadata": {}, "execution_count": 7 } ], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## helper functions to filter senses, synonyms and antonyms" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def filter_senses(senses_list, word):\n", " filtered_senses = []\n", " for entry in senses_list:\n", " if 'glosses' in entry:\n", " glosses = entry['glosses']\n", " for gloss_entry in glosses:\n", " for gloss in gloss_entry.split(';'):\n", " s = re.sub('\\s+', ' ', re.sub(\"[\\(\\[].*?[\\)\\]]\", \"\", gloss).replace(\".\", \"\")).strip()\n", " if len(s) > 0 and word not in s:\n", " filtered_senses.append(s)\n", " return filtered_senses" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def filter_synonyms(synonyms_list):\n", " filtered_synonyms = []\n", " for entry in synonyms_list:\n", " if 'word' in entry:\n", " filtered_synonyms.append(entry['word'])\n", " return filtered_synonyms" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def filter_antonyms(antonym_list):\n", " filtered_antonyms = []\n", " for entry in antonym_list:\n", " if 'word' in entry:\n", " filtered_antonyms.append(entry['word'])\n", " return filtered_antonyms" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def add_wiktionary_item(item, db):\n", " item = {}\n", " if 'word' not in item.keys():\n", " return\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## build a dictionary_database from the raw extract\n", "using words as keys, enumerate those keys (e.g. `house`, `house1`, `house2` etc.) on duplicates" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dictionary_database = {}\n", "for item in tqdm.tqdm(english_vocab_db):\n", " if 'word' in item:\n", " word = item['word']\n", " i = 0\n", " while word in dictionary_database:\n", " i += 1\n", " word = f\"{item['word']}{i}\"\n", " dictionary_database[word] = item\n", " " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class NoDataException(Exception):\n", " pass\n", "\n", "def get_attribute(word:str, attr:str, db = dictionary_database):\n", " if word not in db:\n", " raise NoDataException\n", " item = db[word]\n", " if attr not in item:\n", " raise NoDataException\n", " return item[attr]\n", "\n", "def get_senses(word: str):\n", " \n", " senses = get_attribute(word, 'senses')\n", " \n", " return filter_senses(senses, word)\n", "\n", "def get_synonyms(word: str):\n", " syns = get_attribute(word, 'synonyms')\n", " \n", " return filter_synonyms(syns)\n", "\n", "def get_antonyms(word: str):\n", " ants = get_attribute(word, 'antonyms')\n", " \n", " return filter_antonyms(ants)\n", "\n", "def display_info(word: str):\n", " \n", " if word not in dictionary_database:\n", " raise NoDataException\n", " \n", " try:\n", " senses = get_senses(word)\n", " except NoDataException:\n", " senses = []\n", " \n", " try:\n", " synonyms = get_synonyms(word)\n", " except NoDataException:\n", " synonyms = []\n", " \n", " try:\n", " antonyms = get_antonyms(word)\n", " except NoDataException:\n", " antonyms = []\n", " \n", " senses_str = '\\n'.join([f\"* {sense}\" for sense in senses])\n", " \n", " synonyms_str = '\\n'.join([f\"* {syn}\" for syn in synonyms])\n", " \n", " antonyms_str = '\\n'.join([f\"* {ant}\" for ant in antonyms])\n", " \n", " markdown_string = f\"\"\"\n", "## {word}\n", "\n", "### Senses:\n", "\n", "{senses_str}\n", "\n", "### Synonyms:\n", "\n", "{synonyms_str}\n", "\n", "### Antonyms:\n", "\n", "{antonyms_str}\n", " \n", " \"\"\"\n", " \n", " return Markdown(markdown_string)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import random\n", "list_words = []\n", "for word in tqdm.tqdm(dictionary_database.keys()):\n", " item = dictionary_database[word]\n", " try:\n", " senses = get_senses(word)\n", " if len(senses) > 4:\n", " list_words.append(word)\n", " continue\n", " try:\n", " if len(get_antonyms(word)) >= 1:\n", " list_words.append(word)\n", " continue\n", " except NoDataException:\n", " if len(get_synonyms(word)) >= 1:\n", " list_words.append(word)\n", " \n", " except NoDataException:\n", " pass\n", " " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "display(display_info(\"cockmonger\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "## algorithm to build a grid of words" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "## store an optimized library version for production\n", "optimized_lib = {}\n", "for word in tqdm.tqdm(list_words):\n", " item = {}\n", " senses = None\n", " antonyms = None\n", " synonyms = None\n", " try:\n", " senses = get_senses(word)\n", " except:\n", " pass\n", " try:\n", " synonyms = get_synonyms(word)\n", " except:\n", " pass\n", " try:\n", " antonyms = get_antonyms(word)\n", " except:\n", " pass\n", " \n", " item['senses'] = senses\n", " item['antonyms'] = antonyms\n", " item['synonyms'] = synonyms\n", " item['word'] = dictionary_database[word]['word']\n", " optimized_lib[word] = item" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for key,item in optimized_lib" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "with open(\"en.json\",'w') as f:\n", " json.dump(optimized_lib, f, indent = 4)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m\n", "\u001b[0mjson\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdump\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mfp\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mskipkeys\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mensure_ascii\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mcheck_circular\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mallow_nan\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mcls\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mindent\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mseparators\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mdefault\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0msort_keys\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkw\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m\n", "Serialize ``obj`` as a JSON formatted stream to ``fp`` (a\n", "``.write()``-supporting file-like object).\n", "\n", "If ``skipkeys`` is true then ``dict`` keys that are not basic types\n", "(``str``, ``int``, ``float``, ``bool``, ``None``) will be skipped\n", "instead of raising a ``TypeError``.\n", "\n", "If ``ensure_ascii`` is false, then the strings written to ``fp`` can\n", "contain non-ASCII characters if they appear in strings contained in\n", "``obj``. Otherwise, all such characters are escaped in JSON strings.\n", "\n", "If ``check_circular`` is false, then the circular reference check\n", "for container types will be skipped and a circular reference will\n", "result in an ``OverflowError`` (or worse).\n", "\n", "If ``allow_nan`` is false, then it will be a ``ValueError`` to\n", "serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``)\n", "in strict compliance of the JSON specification, instead of using the\n", "JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).\n", "\n", "If ``indent`` is a non-negative integer, then JSON array elements and\n", "object members will be pretty-printed with that indent level. An indent\n", "level of 0 will only insert newlines. ``None`` is the most compact\n", "representation.\n", "\n", "If specified, ``separators`` should be an ``(item_separator, key_separator)``\n", "tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and\n", "``(',', ': ')`` otherwise. To get the most compact JSON representation,\n", "you should specify ``(',', ':')`` to eliminate whitespace.\n", "\n", "``default(obj)`` is a function that should return a serializable version\n", "of obj or raise TypeError. The default simply raises TypeError.\n", "\n", "If *sort_keys* is true (default: ``False``), then the output of\n", "dictionaries will be sorted by key.\n", "\n", "To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the\n", "``.default()`` method to serialize additional types), specify it with\n", "the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.\n", "\u001b[0;31mFile:\u001b[0m /usr/lib/python3.9/json/__init__.py\n", "\u001b[0;31mType:\u001b[0m function\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "?json.dump" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import random\n", "from string import digits\n", "\n", "class WordInfo(object):\n", " def __init__(self, word:str, y:int, x:int, is_vertical: bool, database=dictionary_database):\n", " self._dictionary_database = dictionary_database\n", " self._y = y\n", " self._x = x\n", " self._word = word\n", " self._hint = None\n", " self._is_vertical = is_vertical\n", " \n", " self.choose_info()\n", " \n", " def get_best_antonym(self) -> str:\n", " antonyms = get_antonyms(self._word)\n", " return random.choice(antonyms)\n", " \n", " def get_best_synonym(self) -> str:\n", " synonyms = get_synonyms(self._word)\n", " return random.choice(synonyms)\n", " \n", " def get_best_sense(self) -> str:\n", " senses = get_senses(self._word)\n", " return random.choice(senses)\n", " \n", " def choose_info(self):\n", " # first choose antonyms, then synonyms, then senses\n", " \n", " try:\n", " self._hint = f\"opposite of {self.get_best_antonym()}\"\n", " except NoDataException:\n", " pass\n", " \n", " try:\n", " self._hint = f\"other word for {self.get_best_synonym()}\"\n", " except NoDataException:\n", " pass\n", " \n", " self._hint = self.get_best_sense()\n", " \n", " def get_hint(self) -> str:\n", " return self._hint\n", " \n", " def get_hint_location(self):\n", " x = self._x if self._is_vertical else self._x - 1\n", " y = self._y if self._is_vertical else self._y - 1\n", " return (y, x)\n", " \n", " def is_vertical(self):\n", " return self._is_vertical\n", "\n", "def create_word_grid(w: int, h: int, word_list = list_words, target_density = 0.5):\n", " grid = np.full(shape=(h,w), dtype=np.unicode, fill_value = ' ')\n", " \n", " locations = {}\n", " \n", " word_hints = {}\n", " \n", " def store_location(char: str, y: int, x: int):\n", " assert len(char) == 1\n", " \n", " if char not in locations:\n", " locations[char] = []\n", " \n", " locations[char].append([y,x])\n", " \n", " remove_digits = str.maketrans('', '', digits)\n", " n_words = len(list_words)\n", " \n", " def get_word(max_length: int, min_length = 0):\n", " assert max_length > 1\n", " \n", " index = random.randint(0,n_words-1)\n", " word = list_words[index][:]\n", " \n", " while len(word) >= max_length or not word.isalnum() or len(word) <= min_length:\n", " index = random.randint(0,n_words-1)\n", " word = list_words[index][:]\n", " \n", " return word\n", " \n", " def normalize_word(word:str):\n", " word = word.translate(remove_digits)\n", " return word.lower()\n", " \n", " def place_word(word:str, y: int, x:int, vertical:bool = False):\n", " normalized_word = normalize_word(word)\n", " n = len(normalized_word)\n", " if vertical:\n", " assert grid.shape[0] - n >= y\n", " for i, char in enumerate(normalized_word):\n", " grid[y + i,x] = char\n", " store_location(char, y+i, x)\n", " else:\n", " assert grid.shape[1] - n >= x\n", " for i, char in enumerate(normalized_word):\n", " grid[y,x + i] = char\n", " store_location(char, y, x+i)\n", " \n", " word_hints[normalized_word] = WordInfo(word, y, x, vertical)\n", " \n", " \n", " \n", " def density():\n", " return 1 - (grid == \" \").sum() / (w * h)\n", " \n", " \n", " \n", " def check_if_fits(word:str, y:int, x:int, vertical:bool):\n", " n = len(word)\n", " if vertical:\n", " \n", " # check if there is space before and after\n", " if y - 1 >= 0 and grid[y - 1, x] != \" \":\n", " return False\n", " if y + n < grid.shape[0] - 1 and grid[y+n,x] != \" \":\n", " return False\n", " \n", " if grid.shape[0] - n < y or y < 0:\n", " #print(\"over board\")\n", " return False\n", " \n", " for i, char in enumerate(word):\n", " char_x = x\n", " char_y = y + i\n", " \n", " if not (grid[char_y, char_x] == \" \" or grid[char_y, char_x] == char):\n", " #print(\"not matching\")\n", " return False\n", " \n", " if grid[char_y, char_x] == \" \":\n", " # check for horizonatal neighbors:\n", " if char_x - 1 >= 0 and grid[char_y, char_x - 1] != \" \":\n", " #print(\"3\")\n", " return False\n", " if char_x + 1 < grid.shape[1] and grid[char_y, char_x + 1] != \" \":\n", " #print(\"4\")\n", " return False\n", " \n", " else:\n", " \n", " # check if there is space before and after\n", " if x - 1 >= 0 and grid[y, x - 1] != \" \":\n", " return False\n", " if x + n < grid.shape[1] - 1 and grid[y,x + n] != \" \":\n", " return False\n", " \n", " if grid.shape[1] - n < x or x < 0:\n", " #print(\"over board\")\n", " return False\n", " \n", " for i, char in enumerate(word):\n", " char_x = x + i\n", " char_y = y\n", " \n", " if not (grid[char_y, char_x] == \" \" or grid[char_y, char_x] == char):\n", " #print(\"not matching\")\n", " return False\n", " \n", " if grid[char_y, char_x] == \" \":\n", " # check for vertical neighbors:\n", " if char_y - 1 >= 0 and grid[char_y - 1, char_x] != \" \":\n", " #print(\"1\")\n", " return False\n", " if char_y + 1 < grid.shape[0] and grid[char_y + 1, char_x] != \" \":\n", " #print(\"2\")\n", " return False\n", " \n", " return True\n", " \n", " \n", " def get_crossover(word: str):\n", " # returns Tuple of: (y,x, is_vertical?) or None\n", " \n", " shuffled_order = list(range(len(word)))\n", " random.shuffle(shuffled_order)\n", " \n", " for index in shuffled_order:\n", " # check for existing locations\n", " char = word[index]\n", " if char in locations:\n", " char_locations = locations[char]\n", " \n", " for char_loc in char_locations:\n", " # test vertical\n", " y = char_loc[0] - index\n", " x = char_loc[1]\n", " \n", " if check_if_fits(word, y, x, vertical=True):\n", " return (y,x,True)\n", " \n", " # test horizontal\n", " y = char_loc[0]\n", " x = char_loc[1] - index\n", " \n", " if check_if_fits(word, y, x, vertical=False):\n", " return (y,x,False)\n", " \n", " return None\n", " \n", " min_shape = min(w,h,30)\n", " \n", " # place first word:\n", " first_word = get_word(max_length=min_shape, min_length=min(10,grid.shape[1] - 2))\n", " \n", " # find random place:\n", " x = random.randint(0, grid.shape[1] - len(first_word) - 1)\n", " y = random.randint(0, grid.shape[0] - 1)\n", " \n", " place_word(first_word, y, x, vertical=False)\n", " \n", " i = 0\n", " \n", " \n", " current_density = density()\n", " \n", " while current_density < target_density:\n", " word = get_word(max_length=(1 - current_density ** 0.4) * min_shape,\n", " min_length=max(min(10, 0.5 * (1 - current_density ** 0.3) * min_shape), 2))\n", " \n", " normalized_word = normalize_word(word)\n", " \n", " if normalized_word in word_hints:\n", " continue\n", " \n", " # check if matching characters exist:\n", " crossover = get_crossover(normalized_word)\n", " \n", " i += 1\n", " if i % 100000 == 0:\n", " print(i)\n", " if i > 100000:\n", " break\n", " \n", " if crossover == None:\n", " current_density = density()\n", " continue\n", " \n", " y,x,is_vertical = crossover\n", " \n", " place_word(word, y,x, is_vertical)\n", " \n", " current_density = density()\n", " \n", " print(i)\n", " return grid, word_hints\n", " \n", " \n", " \n", " \n", " \n", " " ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name '__file__' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0m__file__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name '__file__' is not defined" ] } ], "source": [ "__file__\n" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "762\n" ] }, { "data": { "text/markdown": [ "| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |\n", "|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|\n", "| | | | | |**d**|**e**|**n**|**s**|**i**|**t**|**o**|**m**|**e**|**t**|**e**|**r**| | |**h**| | |**z**| | | |**h**|**a**|**m**|**m**|**e**|**r**|**s**| | |**p**|**p**|**l**| | | | |**d**| |**h**|**a**|**w**|**k**|\n", "| | | |**v**| | | |**o**| | | | | |**x**| | |**m**| |**w**|**o**|**r**|**k**|**e**|**r**|**y**| | |**u**| | | | | | |**d**| |**e**| |**t**|**e**|**n**|**o**|**u**|**s**| |**m**| | |\n", "| | |**m**|**a**|**s**|**l**|**e**|**n**|**i**|**t**|**s**|**a**| | | | | | | |**i**| | |**k**| | | |**f**|**r**|**e**|**e**| |**c**|**u**|**m**|**m**|**e**|**r**| | |**c**| | |**f**| | |**i**| |**m**|\n", "| | | |**g**| | | |**i**| |**h**| | |**c**| | |**p**|**l**|**e**|**c**|**t**|**i**|**l**|**e**| | |**d**| |**e**| | |**p**| |**n**| |**v**| |**u**| |**s**|**t**|**a**|**m**|**f**|**o**|**r**|**d**| |**r**|\n", "| | | |**u**|**l**|**c**|**e**|**r**|**o**|**u**|**s**| |**o**| |**i**| |**i**| |**o**| | | | |**c**| |**a**|**j**|**o**|**g**| |**a**| |**j**| | | |**s**| | |**h**| | | | | |**s**|**e**|**t**|\n", "| |**d**|**u**|**e**| | | |**r**| |**s**| |**a**|**m**|**e**|**n**| |**q**| |**i**| |**p**|**i**|**l**|**l**|**a**|**r**| |**l**| | |**n**| |**o**| | |**r**|**a**|**d**|**c**|**l**|**i**|**f**|**f**|**e**| |**t**| | |\n", "| |**e**| | | |**b**| |**i**| | |**h**| |**m**| |**c**| |**u**| |**n**| |**o**| | |**a**| |**t**| |**e**| | |**t**| |**c**| |**a**| |**l**| | |**i**| | |**a**| |**l**| |**i**| |\n", "| |**c**|**o**|**n**|**s**|**u**|**l**|**t**|**i**|**v**|**e**| |**e**|**x**|**o**|**t**|**i**|**c**| |**b**|**l**|**n**| |**d**| |**o**| | |**v**| |**s**|**q**|**u**|**a**|**s**|**h**| |**k**|**i**|**p**| | |**n**| |**i**| |**n**| |\n", "|**m**|**i**| | | |**t**| |**a**| | |**x**| |**a**| |**n**| |**d**| | | |**y**| |**c**| |**w**|**i**|**t**|**h**|**e**| | | |**l**| |**t**| | | | |**s**| |**s**|**t**|**e**|**m**| |**s**| |\n", "| |**d**| |**u**| |**t**|**u**|**t**| |**o**| | |**s**| |**s**| |**a**| |**s**| |**s**| |**r**|**x**| |**d**| | |**g**|**g**| | |**a**| | |**e**| |**b**| |**i**| | |**o**| |**n**| |**u**| |\n", "| |**a**| |**p**| |**r**| |**i**|**n**|**s**|**t**|**r**|**u**|**m**|**e**|**n**|**t**|**a**|**l**|**l**|**y**| |**y**| | | | | |**i**| |**p**|**a**|**r**|**v**|**o**|**v**|**i**|**r**|**u**|**s**| | |**d**| |**e**|**o**|**f**| |\n", "| |**b**|**a**|**w**|**n**|**e**|**e**|**n**| |**t**| | |**r**| |**q**| |**i**| |**i**| |**n**| |**s**|**h**|**r**|**o**|**u**|**d**|**e**|**d**| |**m**| |**a**| |**p**| |**i**| | | |**m**| | |**m**| |**f**| |\n", "| |**l**| |**i**| |**s**| |**g**|**a**|**r**|**b**| |**a**| |**u**| |**o**| |**c**|**a**|**o**| |**t**| |**f**| | | | | |**s**|**h**|**a**|**r**|**p**| |**i**|**n**|**a**|**c**|**c**|**e**|**s**|**s**|**i**|**b**|**l**|**e**|\n", "| |**e**| |**n**| |**s**| | | |**a**| | |**b**|**e**|**e**| |**n**| |**k**| |**d**| |**a**| |**s**| |**c**| |**s**| | |**e**| | |**w**| | |**e**| |**s**| |**t**| | |**c**| |**a**| |\n", "| | |**e**|**g**|**g**| | |**r**|**i**|**c**|**h**| |**l**| |**n**|**p**| |**p**|**i**| |**y**|**e**|**l**|**l**| |**j**|**o**|**i**|**n**|**d**|**e**|**r**| | | |**s**| | | |**s**| |**a**| |**c**| | |**t**| |\n", "| |**t**| | | | |**f**| | |**i**| | |**e**| |**t**| |**b**| |**n**| | | |**l**| |**p**| |**n**| |**i**| | |**s**| |**o**| |**t**| | |**u**| |**a**|**l**|**p**|**h**|**a**|**b**|**e**|**t**|\n", "| |**y**| | |**b**|**a**|**l**|**m**|**l**|**i**|**k**|**e**| |**a**| | |**u**|**n**|**g**|**l**|**a**|**m**|**o**|**r**|**o**|**u**|**s**| |**t**| | |**t**| |**s**|**o**|**f**|**a**| |**n**| | |**l**| |**i**| | | |**e**|\n", "| |**r**| | |**u**| |**c**| | |**f**| |**v**| |**k**| | |**l**| | | | | |**g**| |**o**| |**o**| | |**c**| | | |**c**| |**u**| | |**c**|**l**|**a**|**y**| |**l**|**e**|**o**|**l**|**a**|\n", "|**s**|**o**|**d**| |**r**| | |**g**|**e**|**o**|**d**|**e**|**t**|**i**|**c**|**a**|**l**| | | |**w**| |**e**| |**r**| |**l**| |**p**|**o**|**i**|**n**|**t**|**e**| | |**w**| |**u**| | | | |**i**| | |**o**| |\n", "|**k**| |**o**| |**p**|**l**| | | |**r**| |**n**| | | |**p**| | |**b**|**g**|**a**| |**n**| | |**s**|**i**|**c**| |**n**| | | |**o**| | |**r**| |**t**| | |**d**|**o**|**a**|**t**|**i**|**n**|**g**|\n", "|**i**| |**w**| | | | |**s**|**i**|**m**| | |**n**|**a**|**g**|**p**|**u**|**r**| | |**l**| | |**w**| | |**d**| | |**t**| |**w**|**i**|**l**|**d**|**f**|**i**|**r**|**e**| |**e**| | |**s**| | |**g**| |\n", "|**r**| |**n**| | |**f**|**d**|**m**| | |**p**|**s**| | | |**e**| | | | |**d**|**e**|**v**|**a**|**s**|**t**|**a**|**t**|**i**|**o**|**n**| | |**a**| | |**g**| | |**b**|**l**|**o**|**o**|**t**|**h**| |**v**| |\n", "|**r**|**e**|**s**|**e**|**t**| | |**e**| | |**i**| | | | |**r**|**o**|**u**|**p**| |**r**| | |**t**| | |**t**| | |**r**| | | | |**p**|**i**|**g**|**g**|**y**| |**s**| | | |**d**| |**i**| |\n", "| | |**t**| |**i**| |**c**|**a**|**p**|**i**|**t**|**a**|**l**|**i**|**s**|**t**| | |**r**| |**o**| | |**t**| |**b**|**e**|**a**|**s**|**t**| | | |**h**| | |**l**| | | |**e**|**n**|**r**|**o**|**l**|**l**|**e**|**d**|\n", "|**m**|**e**|**a**|**s**|**l**|**y**| |**t**| | |**k**| | |**d**| |**a**|**l**|**l**|**y**| |**n**|**c**| |**l**| |**e**| | |**o**| |**m**| |**w**|**a**|**n**|**t**|**e**|**d**| | | | |**a**| | | |**w**| |\n", "|**e**| |**g**| |**l**| | |**o**| |**p**|**i**|**p**| |**p**| |**i**| | | | | | | |**e**| |**n**| | |**p**| |**s**| | |**n**| | |**r**| | | |**a**| |**c**| | | | | |\n", "| |**k**|**e**|**y**|**p**|**o**|**i**|**n**|**t**| |**n**| |**g**|**r**|**a**|**n**|**d**|**f**|**a**|**t**|**h**|**e**|**r**|**l**|**y**| | |**w**|**a**|**r**|**b**|**i**|**r**|**d**| | | | | | |**c**|**l**|**e**|**a**|**n**| | | |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#%%prun\n", "gr, infos = create_word_grid(16*3,9*3, target_density=0.55)\n", "def grid2mdown(grid):\n", " h,w = grid.shape\n", " \n", " md_str = \" \".join([\"|\"] * (w+1)) + \"\\n\"\n", " md_str += \":---:\".join([\"|\"] * (w+1)) + \"\\n\"\n", " \n", " for y in range(h):\n", " md_str += \"|\" + \"|\".join([(f\"**{grid[y,x]}**\" if grid[y,x] != \" \" else \" \") for x in range(w)]) + \"|\\n\"\n", " \n", " return Markdown(md_str)\n", "\n", "display(grid2mdown(gr))\n", " \n", " " ] }, { "cell_type": "code", "execution_count": 279, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "edie -- surname\n" ] } ], "source": [ "i=220\n", "\n", "word = list(infos.keys())[i]\n", "\n", "print(word, \"--\", infos[word].get_hint())" ] }, { "cell_type": "code", "execution_count": 360, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "\n", "## wagenboom\n", "\n", "### Senses:\n", "\n", "* A South African proteaceous tree\n", "* The tough wood of this tree, used for making wagon wheels\n", "\n", "### Synonyms:\n", "\n", "* waboom\n", "* wagon tree\n", "\n", "### Antonyms:\n", "\n", "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(display_info(\"wagenboom\"))" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "from enum import Enum\n", "\n", "class HintOrientation(Enum):\n", " VERTICAL = 0\n", " HORIZONTAL = 1\n", " BOTH = 2\n", " \n", "class FieldType(Enum):\n", " EMPTY = 0\n", " HINT = 1\n", " LETTER = 2\n", "\n", "class Field(object):\n", " def __init__(self, field_type: FieldType = FieldType.EMPTY):\n", " self._field_type = field_type\n", " \n", " def get_type(self) -> FieldType:\n", " return self._field_type\n", " \n", " def get_content(self) -> str:\n", " return None\n", "\n", "class HintField(Field):\n", " def __init__(self, horizontal_hint: str = None, vertical_hint: str = None):\n", " super().__init__(field_type=FieldType.HINT)\n", " \n", " self._horizontal_hint = horizontal_hint\n", " self._vertical_hint = vertical_hint\n", " \n", " def get_horizontal_hint(self) -> str:\n", " return self._horizontal_hint\n", " \n", " def get_vertical_hint(self) -> str:\n", " return self._vertical_hint\n", " \n", " def set_horizintal_hint(hint: str):\n", " self._horizontal_hint = hint\n", " \n", " def set_vertical_hint(hint:str):\n", " self._vertical_hint = hint\n", "\n", "class LetterField(Field):\n", " def __init__(self, letter: str):\n", " assert len(letter) <= 1\n", " \n", " super().__init__(field_type = FieldType.LETTER)\n", " \n", " self._letter = letter\n", " self._revealed = False\n", " \n", " def get_content(self) -> str:\n", " return self._letter\n", " \n", " def reveal(self):\n", " self._revealed = True\n", " \n", " def is_revealed(self) -> bool:\n", " return self._revealed\n", "\n", "class Grid(object):\n", " def __init__(self, width: int, height: int, density = 0.5):\n", " self._width = width\n", " self._height = height\n", " self._density = density\n", " self._grid = []\n", " self._build_grid()\n", " \n", " def _build_grid(self):\n", " raw_grid, word_infos = create_word_grid(self._width - 1, self._height - 1, target_density=self._density)\n", " \n", " # note: we will append an additional row and column, to have enough space to place hint fields\n", " \n", " self._grid = [[Field()] * self._width] # initialize with empty row\n", " \n", " for y in range(self._height):\n", " row = [Field()] # initialize row with empty column\n", " for x in range(self._width):\n", " raw_cell = raw_grid[y-1,x-1]\n", " if raw_cell == \" \":\n", " row.append(Field())\n", " else:\n", " row.append(LetterField(raw_cell))\n", " \n", " self._grid.append(row)\n", " \n", " # place hint fields:\n", " for word, info in word_infos.items():\n", " y,x = info.get_hint_location()\n", " # correct offset\n", " y += 1\n", " x += 1\n", " \n", " cell = self._grid[y][x]\n", " \n", " # check if we already have a hint here:\n", " if cell.get_type() == FieldType.HINT:\n", " if info.is_vertical():\n", " cell.set_vertical_hint(info.get_hint())\n", " else:\n", " cell.set_horizintal_hint(info.get_hint())\n", " elif cell.get_type() == FieldType.LETTER:\n", " # edge case: a word has \"eaten up\" another one, skipping that case\n", " pass\n", " \n", " else:\n", " if info.is_vertical():\n", " self._grid[y][x] = HintField(vertical_hint=info.get_hint())\n", " else:\n", " self._grid[y][x] = HintField(horizontal_hint=info.get_hint())\n", "\n", " \n", "class Crossword(object):\n", " def __init__(self, width: int, height: int, database: dict):\n", " self._width = width\n", " self._height = height\n", " self._database = database\n", " self._grid = Grid(width, height)\n", " \n", " \n", " \n", " " ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "209\n" ] } ], "source": [ "cw = Crossword(16*3, 9*3, english_vocab_db)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[<__main__.HintField at 0x7f207d65a820>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.HintField at 0x7f207d64a280>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.HintField at 0x7f207ef54eb0>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>,\n", " <__main__.Field at 0x7f207eadd460>],\n", " [<__main__.Field at 0x7f207eadd100>,\n", " <__main__.Field at 0x7f207eadd4f0>,\n", " <__main__.LetterField at 0x7f207eadd580>,\n", " <__main__.LetterField at 0x7f207ed42970>,\n", " <__main__.LetterField at 0x7f207ed42790>,\n", " <__main__.LetterField at 0x7f207ed42130>,\n", " <__main__.Field at 0x7f207ed42190>,\n", " <__main__.Field at 0x7f207ed42370>,\n", " <__main__.Field at 0x7f207ed423a0>,\n", " <__main__.LetterField at 0x7f207ed42160>,\n", " <__main__.LetterField at 0x7f207ed42610>,\n", " <__main__.LetterField at 0x7f207ed42490>,\n", " <__main__.LetterField at 0x7f207ed42670>,\n", " <__main__.LetterField at 0x7f207ed42a90>,\n", " <__main__.HintField at 0x7f207ef5dee0>,\n", " <__main__.LetterField at 0x7f207ed42ac0>,\n", " <__main__.Field at 0x7f207ed427f0>,\n", " <__main__.Field at 0x7f207ed42dc0>,\n", " <__main__.Field at 0x7f207ed42be0>,\n", " <__main__.Field at 0x7f207ed429d0>,\n", " <__main__.Field at 0x7f207ed42f10>,\n", " <__main__.HintField at 0x7f207ebfc6a0>,\n", " <__main__.Field at 0x7f207ed42a00>,\n", " <__main__.LetterField at 0x7f207ed424f0>,\n", " <__main__.LetterField at 0x7f207ed42520>,\n", " <__main__.LetterField at 0x7f207ed42d60>,\n", " <__main__.LetterField at 0x7f207ed42c10>,\n", " <__main__.LetterField at 0x7f207ed42f40>,\n", " <__main__.LetterField at 0x7f207ec58e80>,\n", " <__main__.LetterField at 0x7f207ec58f10>,\n", " <__main__.HintField at 0x7f207d6484c0>,\n", " <__main__.HintField at 0x7f207d665fa0>,\n", " <__main__.Field at 0x7f207ec58e20>,\n", " <__main__.HintField at 0x7f207d65fb80>,\n", " <__main__.Field at 0x7f207ec58c70>,\n", " <__main__.Field at 0x7f207ec58df0>,\n", " <__main__.Field at 0x7f207ec58b20>,\n", " <__main__.LetterField at 0x7f207ec58bb0>,\n", " <__main__.Field at 0x7f207ec58a90>,\n", " <__main__.HintField at 0x7f207ed5a910>,\n", " <__main__.Field at 0x7f207ec58b80>,\n", " <__main__.LetterField at 0x7f207ec58b50>,\n", " <__main__.Field at 0x7f207ec58d00>,\n", " <__main__.Field at 0x7f207ec58c40>,\n", " <__main__.Field at 0x7f207ec588e0>,\n", " <__main__.Field at 0x7f207ec587c0>,\n", " <__main__.Field at 0x7f207ec58700>,\n", " <__main__.Field at 0x7f207ec58790>,\n", " <__main__.Field at 0x7f207ec58940>],\n", " [<__main__.Field at 0x7f207eadd0a0>,\n", " <__main__.Field at 0x7f207ec58760>,\n", " <__main__.LetterField at 0x7f207ec58dc0>,\n", " <__main__.LetterField at 0x7f207ebfcdc0>,\n", " <__main__.LetterField at 0x7f207ebfc1f0>,\n", " <__main__.LetterField at 0x7f207ebfc790>,\n", " <__main__.LetterField at 0x7f207ebfc280>,\n", " <__main__.LetterField at 0x7f207ebfc760>,\n", " <__main__.Field at 0x7f207ebfc5b0>,\n", " <__main__.HintField at 0x7f207d66fb80>,\n", " <__main__.Field at 0x7f207ebfc220>,\n", " <__main__.LetterField at 0x7f207ebfc910>,\n", " <__main__.LetterField at 0x7f207ebfce80>,\n", " <__main__.LetterField at 0x7f207ebfcac0>,\n", " <__main__.LetterField at 0x7f207ebfc100>,\n", " <__main__.LetterField at 0x7f207ebfceb0>,\n", " <__main__.LetterField at 0x7f207ebfc4c0>,\n", " <__main__.LetterField at 0x7f207ebfca00>,\n", " <__main__.LetterField at 0x7f207ebfcfa0>,\n", " <__main__.HintField at 0x7f207ebe9250>,\n", " <__main__.Field at 0x7f207ebfc190>,\n", " <__main__.Field at 0x7f207ebfc850>,\n", " <__main__.Field at 0x7f207ebfc8b0>,\n", " <__main__.Field at 0x7f207ebfccd0>,\n", " <__main__.LetterField at 0x7f207ebfcd00>,\n", " <__main__.Field at 0x7f207ebfcca0>,\n", " <__main__.LetterField at 0x7f207ebfcc10>,\n", " <__main__.Field at 0x7f207ebfc130>,\n", " <__main__.Field at 0x7f207ebfcee0>,\n", " <__main__.LetterField at 0x7f207ebfce50>,\n", " <__main__.Field at 0x7f207ebfce20>,\n", " <__main__.LetterField at 0x7f207ebfcf40>,\n", " <__main__.Field at 0x7f207ebfc880>,\n", " <__main__.Field at 0x7f207ebfc040>,\n", " <__main__.LetterField at 0x7f207ebfcd60>,\n", " <__main__.Field at 0x7f207ebfc970>,\n", " <__main__.Field at 0x7f207ebfcdf0>,\n", " <__main__.Field at 0x7f207ed5a880>,\n", " <__main__.HintField at 0x7f207d66fc40>,\n", " <__main__.LetterField at 0x7f207f13f0d0>,\n", " <__main__.LetterField at 0x7f207f13f610>,\n", " <__main__.LetterField at 0x7f207f13f0a0>,\n", " <__main__.LetterField at 0x7f207ec74100>,\n", " <__main__.LetterField at 0x7f207ec740d0>,\n", " <__main__.LetterField at 0x7f207ec74130>,\n", " <__main__.Field at 0x7f207ec74580>,\n", " <__main__.Field at 0x7f207ec741f0>,\n", " <__main__.Field at 0x7f207ec74340>,\n", " <__main__.Field at 0x7f207ec74490>],\n", " [<__main__.Field at 0x7f207ec58850>,\n", " <__main__.HintField at 0x7f207ebfca90>,\n", " <__main__.Field at 0x7f207ed75250>,\n", " <__main__.Field at 0x7f207ed75ee0>,\n", " <__main__.LetterField at 0x7f207ed75f40>,\n", " <__main__.Field at 0x7f207ed75fa0>,\n", " <__main__.LetterField at 0x7f207ed75c10>,\n", " <__main__.Field at 0x7f207ed75400>,\n", " <__main__.LetterField at 0x7f207ed754c0>,\n", " <__main__.Field at 0x7f207ed75430>,\n", " <__main__.Field at 0x7f207ed753d0>,\n", " <__main__.Field at 0x7f207ed75a60>,\n", " <__main__.Field at 0x7f207ed75bb0>,\n", " <__main__.LetterField at 0x7f207ed75b20>,\n", " <__main__.Field at 0x7f207ed75a90>,\n", " <__main__.LetterField at 0x7f207ed75790>,\n", " <__main__.Field at 0x7f207ed757c0>,\n", " <__main__.Field at 0x7f207ed757f0>,\n", " <__main__.Field at 0x7f207ed75eb0>,\n", " <__main__.Field at 0x7f207ed75e80>,\n", " <__main__.LetterField at 0x7f207ed75dc0>,\n", " <__main__.Field at 0x7f207ed75d90>,\n", " <__main__.Field at 0x7f207ed75820>,\n", " <__main__.LetterField at 0x7f207ed75d60>,\n", " <__main__.LetterField at 0x7f207ed75d00>,\n", " <__main__.LetterField at 0x7f207eae4160>,\n", " <__main__.LetterField at 0x7f207eae4130>,\n", " <__main__.LetterField at 0x7f207eae44c0>,\n", " <__main__.LetterField at 0x7f207eae46a0>,\n", " <__main__.LetterField at 0x7f207eae4af0>,\n", " <__main__.LetterField at 0x7f207eae4a60>,\n", " <__main__.LetterField at 0x7f207eae4fa0>,\n", " <__main__.Field at 0x7f207eae4c70>,\n", " <__main__.LetterField at 0x7f207eae4700>,\n", " <__main__.LetterField at 0x7f207eae4d00>,\n", " <__main__.LetterField at 0x7f207eae4430>,\n", " <__main__.LetterField at 0x7f207eae4d90>,\n", " <__main__.LetterField at 0x7f207eae4ac0>,\n", " <__main__.LetterField at 0x7f207ef54970>,\n", " <__main__.Field at 0x7f207ef549a0>,\n", " <__main__.LetterField at 0x7f207ef54e80>,\n", " <__main__.Field at 0x7f207ef548e0>,\n", " <__main__.LetterField at 0x7f207ef54850>,\n", " <__main__.HintField at 0x7f207d64ec40>,\n", " <__main__.HintField at 0x7f207d65ca00>,\n", " <__main__.Field at 0x7f207ef54f70>,\n", " <__main__.HintField at 0x7f207d65fe80>,\n", " <__main__.Field at 0x7f207ef54fd0>,\n", " <__main__.Field at 0x7f207ef54c40>],\n", " [<__main__.Field at 0x7f207ed752b0>,\n", " <__main__.Field at 0x7f207ef54d30>,\n", " <__main__.LetterField at 0x7f207ef54cd0>,\n", " <__main__.Field at 0x7f207ef54af0>,\n", " <__main__.LetterField at 0x7f207ef54a00>,\n", " <__main__.Field at 0x7f207ef54a60>,\n", " <__main__.LetterField at 0x7f207ef54bb0>,\n", " <__main__.Field at 0x7f207ef54b50>,\n", " <__main__.LetterField at 0x7f207ef544f0>,\n", " <__main__.Field at 0x7f207ef54c70>,\n", " <__main__.HintField at 0x7f207eadd5e0>,\n", " <__main__.LetterField at 0x7f207ef546d0>,\n", " <__main__.LetterField at 0x7f207ef54760>,\n", " <__main__.LetterField at 0x7f207ef54730>,\n", " <__main__.LetterField at 0x7f207ef546a0>,\n", " <__main__.LetterField at 0x7f207ef54c10>,\n", " <__main__.LetterField at 0x7f207ef542e0>,\n", " <__main__.LetterField at 0x7f207ef54610>,\n", " <__main__.Field at 0x7f207ef545e0>,\n", " <__main__.LetterField at 0x7f207ef54670>,\n", " <__main__.LetterField at 0x7f207ef54640>,\n", " <__main__.LetterField at 0x7f207f153af0>,\n", " <__main__.LetterField at 0x7f207f153100>,\n", " <__main__.Field at 0x7f207f1535e0>,\n", " <__main__.LetterField at 0x7f207f153070>,\n", " <__main__.Field at 0x7f207f153340>,\n", " <__main__.LetterField at 0x7f207f153190>,\n", " <__main__.Field at 0x7f207f153820>,\n", " <__main__.Field at 0x7f207f153220>,\n", " <__main__.LetterField at 0x7f207f153880>,\n", " <__main__.Field at 0x7f207f153d00>,\n", " <__main__.LetterField at 0x7f207f1539d0>,\n", " <__main__.Field at 0x7f207f153550>,\n", " <__main__.Field at 0x7f207eae0670>,\n", " <__main__.LetterField at 0x7f207ef45c40>,\n", " <__main__.Field at 0x7f207ef45bb0>,\n", " <__main__.Field at 0x7f207ef45820>,\n", " <__main__.Field at 0x7f207ef45580>,\n", " <__main__.Field at 0x7f207ef45340>,\n", " <__main__.Field at 0x7f207ef45be0>,\n", " <__main__.LetterField at 0x7f207ebe25e0>,\n", " <__main__.LetterField at 0x7f207ebe24f0>,\n", " <__main__.LetterField at 0x7f207ebe2640>,\n", " <__main__.LetterField at 0x7f207ebe2ca0>,\n", " <__main__.Field at 0x7f207ebe28e0>,\n", " <__main__.LetterField at 0x7f207ebe2f40>,\n", " <__main__.Field at 0x7f207ebe2910>,\n", " <__main__.LetterField at 0x7f207ebe23a0>,\n", " <__main__.Field at 0x7f207ebe2fa0>],\n", " [<__main__.Field at 0x7f207ef54d60>,\n", " <__main__.LetterField at 0x7f207ebe2880>,\n", " <__main__.LetterField at 0x7f207ebe24c0>,\n", " <__main__.HintField at 0x7f207d6612e0>,\n", " <__main__.Field at 0x7f207ebe23d0>,\n", " <__main__.Field at 0x7f207ebe2b50>,\n", " <__main__.LetterField at 0x7f207ebe2a30>,\n", " <__main__.Field at 0x7f207ebe2f10>,\n", " <__main__.LetterField at 0x7f207ebe2610>,\n", " <__main__.LetterField at 0x7f207ebe2be0>,\n", " <__main__.LetterField at 0x7f207ebe2bb0>,\n", " <__main__.Field at 0x7f207ebe2a90>,\n", " <__main__.Field at 0x7f207ebe2d00>,\n", " <__main__.LetterField at 0x7f207ebe2b80>,\n", " <__main__.Field at 0x7f207ebe27f0>,\n", " <__main__.HintField at 0x7f207d657460>,\n", " <__main__.Field at 0x7f207ebe2df0>,\n", " <__main__.Field at 0x7f207ebf3dc0>,\n", " <__main__.HintField at 0x7f207ef54b20>,\n", " <__main__.Field at 0x7f207ebf3550>,\n", " <__main__.LetterField at 0x7f207ebf3670>,\n", " <__main__.Field at 0x7f207ebf36a0>,\n", " <__main__.Field at 0x7f207ebf3610>,\n", " <__main__.Field at 0x7f207ebf3370>,\n", " <__main__.LetterField at 0x7f207ebf3340>,\n", " <__main__.Field at 0x7f207ebf3820>,\n", " <__main__.LetterField at 0x7f207ebf3850>,\n", " <__main__.Field at 0x7f207ebf33d0>,\n", " <__main__.Field at 0x7f207ebf3fa0>,\n", " <__main__.Field at 0x7f207ebf3f70>,\n", " <__main__.LetterField at 0x7f207ebf3fd0>,\n", " <__main__.LetterField at 0x7f207ebf3f10>,\n", " <__main__.LetterField at 0x7f207ebf3d00>,\n", " <__main__.LetterField at 0x7f207ebf31f0>,\n", " <__main__.LetterField at 0x7f207ebf31c0>,\n", " <__main__.LetterField at 0x7f207ebf3280>,\n", " <__main__.LetterField at 0x7f207ebf3100>,\n", " <__main__.LetterField at 0x7f207ebf3730>,\n", " <__main__.LetterField at 0x7f207ebf32b0>,\n", " <__main__.Field at 0x7f207ef4a580>,\n", " <__main__.LetterField at 0x7f207ef4ab50>,\n", " <__main__.Field at 0x7f207ef4a8b0>,\n", " <__main__.LetterField at 0x7f207ef4afd0>,\n", " <__main__.Field at 0x7f207ef4a370>,\n", " <__main__.Field at 0x7f207ef4a5b0>,\n", " <__main__.LetterField at 0x7f207ef4a490>,\n", " <__main__.LetterField at 0x7f207ef4a5e0>,\n", " <__main__.LetterField at 0x7f207ef4a7c0>,\n", " <__main__.LetterField at 0x7f207ef4a1f0>],\n", " [<__main__.HintField at 0x7f207ed42a30>,\n", " <__main__.Field at 0x7f207ef4adc0>,\n", " <__main__.LetterField at 0x7f207ef4ad60>,\n", " <__main__.Field at 0x7f207ef4aaf0>,\n", " <__main__.LetterField at 0x7f207ef4adf0>,\n", " <__main__.Field at 0x7f207ebeeb80>,\n", " <__main__.LetterField at 0x7f207ebee550>,\n", " <__main__.Field at 0x7f207ebeeca0>,\n", " <__main__.LetterField at 0x7f207ebee1c0>,\n", " <__main__.Field at 0x7f207ebeec70>,\n", " <__main__.HintField at 0x7f207d6512e0>,\n", " <__main__.Field at 0x7f207ebee160>,\n", " <__main__.LetterField at 0x7f207ebeef40>,\n", " <__main__.LetterField at 0x7f207ebee2b0>,\n", " <__main__.LetterField at 0x7f207ebee070>,\n", " <__main__.LetterField at 0x7f207ebee7c0>,\n", " <__main__.LetterField at 0x7f207ebee280>,\n", " <__main__.LetterField at 0x7f207ebee850>,\n", " <__main__.LetterField at 0x7f207ebeef70>,\n", " <__main__.LetterField at 0x7f207ebeedc0>,\n", " <__main__.LetterField at 0x7f207ebeefd0>,\n", " <__main__.LetterField at 0x7f207ebeedf0>,\n", " <__main__.LetterField at 0x7f207ebeed00>,\n", " <__main__.LetterField at 0x7f207ebee940>,\n", " <__main__.LetterField at 0x7f207ebee430>,\n", " <__main__.Field at 0x7f207ebeecd0>,\n", " <__main__.LetterField at 0x7f207ebee640>,\n", " <__main__.Field at 0x7f207ebee490>,\n", " <__main__.Field at 0x7f207ebee460>,\n", " <__main__.Field at 0x7f207ebe99a0>,\n", " <__main__.Field at 0x7f207ebe99d0>,\n", " <__main__.Field at 0x7f207ebe98b0>,\n", " <__main__.Field at 0x7f207ebe92b0>,\n", " <__main__.HintField at 0x7f207d64b7c0>,\n", " <__main__.LetterField at 0x7f207ebe9040>,\n", " <__main__.HintField at 0x7f207d650160>,\n", " <__main__.Field at 0x7f207ebe9640>,\n", " <__main__.HintField at 0x7f207ed42af0>,\n", " <__main__.Field at 0x7f207ebe9490>,\n", " <__main__.HintField at 0x7f207ef5ddf0>,\n", " <__main__.LetterField at 0x7f207ebe9820>,\n", " <__main__.Field at 0x7f207ebe96d0>,\n", " <__main__.LetterField at 0x7f207ebe9340>,\n", " <__main__.HintField at 0x7f207d6626a0>,\n", " <__main__.Field at 0x7f207ef5d2b0>,\n", " <__main__.LetterField at 0x7f207ef5d940>,\n", " <__main__.Field at 0x7f207ef5d8b0>,\n", " <__main__.LetterField at 0x7f207ef5dc70>,\n", " <__main__.Field at 0x7f207ef5db50>],\n", " [<__main__.Field at 0x7f207ef4ab20>,\n", " <__main__.Field at 0x7f207ef5d610>,\n", " <__main__.LetterField at 0x7f207ef5d7f0>,\n", " <__main__.Field at 0x7f207ef5da90>,\n", " <__main__.LetterField at 0x7f207ef5d370>,\n", " <__main__.Field at 0x7f207ef5d9d0>,\n", " <__main__.LetterField at 0x7f207ef5d4f0>,\n", " <__main__.Field at 0x7f207ef5d3a0>,\n", " <__main__.LetterField at 0x7f207ef5d400>,\n", " <__main__.LetterField at 0x7f207ef5d430>,\n", " <__main__.LetterField at 0x7f207ef5dd30>,\n", " <__main__.LetterField at 0x7f207ef5df10>,\n", " <__main__.Field at 0x7f207ef5d250>,\n", " <__main__.HintField at 0x7f207ec58f40>,\n", " <__main__.Field at 0x7f207ef5dd90>,\n", " <__main__.Field at 0x7f207ef5d280>,\n", " <__main__.LetterField at 0x7f207ef5de20>,\n", " <__main__.Field at 0x7f207ef5de80>,\n", " <__main__.Field at 0x7f207ef5db20>,\n", " <__main__.LetterField at 0x7f207ef5dac0>,\n", " <__main__.Field at 0x7f207ef5dca0>,\n", " <__main__.Field at 0x7f207ef5df70>,\n", " <__main__.Field at 0x7f207ef5d070>,\n", " <__main__.Field at 0x7f207ef5d130>,\n", " <__main__.Field at 0x7f207ef5d4c0>,\n", " <__main__.LetterField at 0x7f207eaf1550>,\n", " <__main__.Field at 0x7f207eaf1040>,\n", " <__main__.LetterField at 0x7f207eaf1820>,\n", " <__main__.Field at 0x7f207eaf15e0>,\n", " <__main__.Field at 0x7f207eaf1340>,\n", " <__main__.Field at 0x7f207eaf1fd0>,\n", " <__main__.Field at 0x7f207eaf1610>,\n", " <__main__.Field at 0x7f207eaf1bb0>,\n", " <__main__.Field at 0x7f207d648040>,\n", " <__main__.Field at 0x7f207d6480a0>,\n", " <__main__.Field at 0x7f207d648100>,\n", " <__main__.LetterField at 0x7f207d648160>,\n", " <__main__.Field at 0x7f207d6481c0>,\n", " <__main__.LetterField at 0x7f207d648220>,\n", " <__main__.Field at 0x7f207d648280>,\n", " <__main__.LetterField at 0x7f207d6482e0>,\n", " <__main__.Field at 0x7f207d648340>,\n", " <__main__.LetterField at 0x7f207d6483a0>,\n", " <__main__.Field at 0x7f207d648400>,\n", " <__main__.LetterField at 0x7f207d648460>,\n", " <__main__.HintField at 0x7f207ed75310>,\n", " <__main__.Field at 0x7f207d648520>,\n", " <__main__.LetterField at 0x7f207d648580>,\n", " <__main__.Field at 0x7f207d6485e0>],\n", " [<__main__.HintField at 0x7f207d657940>,\n", " <__main__.Field at 0x7f207d648670>,\n", " <__main__.LetterField at 0x7f207d648700>,\n", " <__main__.LetterField at 0x7f207d648760>,\n", " <__main__.LetterField at 0x7f207d6487c0>,\n", " <__main__.LetterField at 0x7f207d648820>,\n", " <__main__.LetterField at 0x7f207d648880>,\n", " <__main__.LetterField at 0x7f207d6488e0>,\n", " <__main__.Field at 0x7f207d648940>,\n", " <__main__.LetterField at 0x7f207d6489a0>,\n", " <__main__.HintField at 0x7f207ebf3ac0>,\n", " <__main__.Field at 0x7f207d648a60>,\n", " <__main__.LetterField at 0x7f207d648ac0>,\n", " <__main__.LetterField at 0x7f207d648b20>,\n", " <__main__.LetterField at 0x7f207d648b80>,\n", " <__main__.Field at 0x7f207d648be0>,\n", " <__main__.LetterField at 0x7f207d648c40>,\n", " <__main__.LetterField at 0x7f207d648ca0>,\n", " <__main__.LetterField at 0x7f207d648d00>,\n", " <__main__.LetterField at 0x7f207d648d60>,\n", " <__main__.LetterField at 0x7f207d648dc0>,\n", " <__main__.LetterField at 0x7f207d648e20>,\n", " <__main__.LetterField at 0x7f207d648e80>,\n", " <__main__.LetterField at 0x7f207d648ee0>,\n", " <__main__.LetterField at 0x7f207d648f40>,\n", " <__main__.LetterField at 0x7f207d648fa0>,\n", " <__main__.Field at 0x7f207d64a040>,\n", " <__main__.LetterField at 0x7f207d64a0a0>,\n", " <__main__.HintField at 0x7f207d64b0a0>,\n", " <__main__.Field at 0x7f207d64a160>,\n", " <__main__.Field at 0x7f207d64a1c0>,\n", " <__main__.Field at 0x7f207d64a220>,\n", " <__main__.HintField at 0x7f207ebe2d30>,\n", " <__main__.HintField at 0x7f207d6595e0>,\n", " <__main__.Field at 0x7f207d64a340>,\n", " <__main__.LetterField at 0x7f207d64a3a0>,\n", " <__main__.LetterField at 0x7f207d64a400>,\n", " <__main__.LetterField at 0x7f207d64a460>,\n", " <__main__.LetterField at 0x7f207d64a4c0>,\n", " <__main__.LetterField at 0x7f207d64a520>,\n", " <__main__.Field at 0x7f207d64a580>,\n", " <__main__.LetterField at 0x7f207d64a5e0>,\n", " <__main__.LetterField at 0x7f207d64a640>,\n", " <__main__.LetterField at 0x7f207d64a6a0>,\n", " <__main__.LetterField at 0x7f207d64a700>,\n", " <__main__.LetterField at 0x7f207d64a760>,\n", " <__main__.LetterField at 0x7f207d64a7c0>,\n", " <__main__.LetterField at 0x7f207d64a820>,\n", " <__main__.Field at 0x7f207d64a880>],\n", " [<__main__.Field at 0x7f207d6486a0>,\n", " <__main__.Field at 0x7f207d64a910>,\n", " <__main__.LetterField at 0x7f207d64a9a0>,\n", " <__main__.Field at 0x7f207d64aa00>,\n", " <__main__.LetterField at 0x7f207d64aa60>,\n", " <__main__.Field at 0x7f207d64aac0>,\n", " <__main__.LetterField at 0x7f207d64ab20>,\n", " <__main__.Field at 0x7f207d64ab80>,\n", " <__main__.Field at 0x7f207d64abe0>,\n", " <__main__.LetterField at 0x7f207d64ac40>,\n", " <__main__.Field at 0x7f207d64aca0>,\n", " <__main__.LetterField at 0x7f207d64ad00>,\n", " <__main__.Field at 0x7f207d64ad60>,\n", " <__main__.Field at 0x7f207d64adc0>,\n", " <__main__.LetterField at 0x7f207d64ae20>,\n", " <__main__.Field at 0x7f207d64ae80>,\n", " <__main__.LetterField at 0x7f207d64aee0>,\n", " <__main__.Field at 0x7f207d64af40>,\n", " <__main__.Field at 0x7f207d64afa0>,\n", " <__main__.LetterField at 0x7f207d64b040>,\n", " <__main__.HintField at 0x7f207d659fa0>,\n", " <__main__.Field at 0x7f207d64b100>,\n", " <__main__.Field at 0x7f207d64b160>,\n", " <__main__.Field at 0x7f207d64b1c0>,\n", " <__main__.Field at 0x7f207d64b220>,\n", " <__main__.LetterField at 0x7f207d64b280>,\n", " <__main__.Field at 0x7f207d64b2e0>,\n", " <__main__.LetterField at 0x7f207d64b340>,\n", " <__main__.Field at 0x7f207d64b3a0>,\n", " <__main__.LetterField at 0x7f207d64b400>,\n", " <__main__.LetterField at 0x7f207d64b460>,\n", " <__main__.LetterField at 0x7f207d64b4c0>,\n", " <__main__.Field at 0x7f207d64b520>,\n", " <__main__.Field at 0x7f207d64b580>,\n", " <__main__.LetterField at 0x7f207d64b5e0>,\n", " <__main__.Field at 0x7f207d64b640>,\n", " <__main__.LetterField at 0x7f207d64b6a0>,\n", " <__main__.Field at 0x7f207d64b700>,\n", " <__main__.LetterField at 0x7f207d64b760>,\n", " <__main__.HintField at 0x7f207d6668e0>,\n", " <__main__.Field at 0x7f207d64b820>,\n", " <__main__.Field at 0x7f207d64b880>,\n", " <__main__.Field at 0x7f207d64b8e0>,\n", " <__main__.Field at 0x7f207d64b940>,\n", " <__main__.LetterField at 0x7f207d64b9a0>,\n", " <__main__.Field at 0x7f207d64ba00>,\n", " <__main__.LetterField at 0x7f207d64ba60>,\n", " <__main__.Field at 0x7f207d64bac0>,\n", " <__main__.Field at 0x7f207d64bb20>],\n", " [<__main__.Field at 0x7f207d64a940>,\n", " <__main__.HintField at 0x7f207d651460>,\n", " <__main__.LetterField at 0x7f207d64bc40>,\n", " <__main__.LetterField at 0x7f207d64bca0>,\n", " <__main__.LetterField at 0x7f207d64bd00>,\n", " <__main__.LetterField at 0x7f207d64bd60>,\n", " <__main__.LetterField at 0x7f207d64bdc0>,\n", " <__main__.Field at 0x7f207d64be20>,\n", " <__main__.Field at 0x7f207d64be80>,\n", " <__main__.LetterField at 0x7f207d64bee0>,\n", " <__main__.Field at 0x7f207d64bf40>,\n", " <__main__.LetterField at 0x7f207d64bfa0>,\n", " <__main__.LetterField at 0x7f207d64d040>,\n", " <__main__.LetterField at 0x7f207d64d0a0>,\n", " <__main__.LetterField at 0x7f207d64d100>,\n", " <__main__.LetterField at 0x7f207d64d160>,\n", " <__main__.LetterField at 0x7f207d64d1c0>,\n", " <__main__.LetterField at 0x7f207d64d220>,\n", " <__main__.LetterField at 0x7f207d64d280>,\n", " <__main__.LetterField at 0x7f207d64d2e0>,\n", " <__main__.LetterField at 0x7f207d64d340>,\n", " <__main__.Field at 0x7f207d64d3a0>,\n", " <__main__.Field at 0x7f207d64d400>,\n", " <__main__.Field at 0x7f207d64d460>,\n", " <__main__.Field at 0x7f207d64d4c0>,\n", " <__main__.LetterField at 0x7f207d64d520>,\n", " <__main__.Field at 0x7f207d64d580>,\n", " <__main__.LetterField at 0x7f207d64d5e0>,\n", " <__main__.Field at 0x7f207d64d640>,\n", " <__main__.LetterField at 0x7f207d64d6a0>,\n", " <__main__.Field at 0x7f207d64d700>,\n", " <__main__.Field at 0x7f207d64d760>,\n", " <__main__.LetterField at 0x7f207d64d7c0>,\n", " <__main__.Field at 0x7f207d64d820>,\n", " <__main__.LetterField at 0x7f207d64d880>,\n", " <__main__.LetterField at 0x7f207d64d8e0>,\n", " <__main__.LetterField at 0x7f207d64d940>,\n", " <__main__.LetterField at 0x7f207d64d9a0>,\n", " <__main__.LetterField at 0x7f207d64da00>,\n", " <__main__.Field at 0x7f207d64da60>,\n", " <__main__.LetterField at 0x7f207d64dac0>,\n", " <__main__.HintField at 0x7f207d659160>,\n", " <__main__.Field at 0x7f207d64db80>,\n", " <__main__.Field at 0x7f207d64dbe0>,\n", " <__main__.LetterField at 0x7f207d64dc40>,\n", " <__main__.Field at 0x7f207d64dca0>,\n", " <__main__.LetterField at 0x7f207d64dd00>,\n", " <__main__.Field at 0x7f207d64dd60>,\n", " <__main__.Field at 0x7f207d64ddc0>],\n", " [<__main__.Field at 0x7f207d64bbe0>,\n", " <__main__.Field at 0x7f207d64de50>,\n", " <__main__.Field at 0x7f207d64dee0>,\n", " <__main__.Field at 0x7f207d64df40>,\n", " <__main__.LetterField at 0x7f207d64dfa0>,\n", " <__main__.Field at 0x7f207d64e040>,\n", " <__main__.LetterField at 0x7f207d64e0a0>,\n", " <__main__.Field at 0x7f207d64e100>,\n", " <__main__.Field at 0x7f207d64e160>,\n", " <__main__.LetterField at 0x7f207d64e1c0>,\n", " <__main__.Field at 0x7f207d64e220>,\n", " <__main__.LetterField at 0x7f207d64e280>,\n", " <__main__.Field at 0x7f207d64e2e0>,\n", " <__main__.Field at 0x7f207d64e340>,\n", " <__main__.LetterField at 0x7f207d64e3a0>,\n", " <__main__.Field at 0x7f207d64e400>,\n", " <__main__.LetterField at 0x7f207d64e460>,\n", " <__main__.Field at 0x7f207d64e4c0>,\n", " <__main__.Field at 0x7f207d64e520>,\n", " <__main__.LetterField at 0x7f207d64e580>,\n", " <__main__.Field at 0x7f207d64e5e0>,\n", " <__main__.Field at 0x7f207d64e640>,\n", " <__main__.LetterField at 0x7f207d64e6a0>,\n", " <__main__.LetterField at 0x7f207d64e700>,\n", " <__main__.LetterField at 0x7f207d64e760>,\n", " <__main__.LetterField at 0x7f207d64e7c0>,\n", " <__main__.LetterField at 0x7f207d64e820>,\n", " <__main__.LetterField at 0x7f207d64e880>,\n", " <__main__.LetterField at 0x7f207d64e8e0>,\n", " <__main__.LetterField at 0x7f207d64e940>,\n", " <__main__.LetterField at 0x7f207d64e9a0>,\n", " <__main__.LetterField at 0x7f207d64ea00>,\n", " <__main__.LetterField at 0x7f207d64ea60>,\n", " <__main__.LetterField at 0x7f207d64eac0>,\n", " <__main__.LetterField at 0x7f207d64eb20>,\n", " <__main__.Field at 0x7f207d64eb80>,\n", " <__main__.LetterField at 0x7f207d64ebe0>,\n", " <__main__.HintField at 0x7f207d65aac0>,\n", " <__main__.Field at 0x7f207d64eca0>,\n", " <__main__.Field at 0x7f207d64ed00>,\n", " <__main__.LetterField at 0x7f207d64ed60>,\n", " <__main__.Field at 0x7f207d64edc0>,\n", " <__main__.LetterField at 0x7f207d64ee20>,\n", " <__main__.Field at 0x7f207d64ee80>,\n", " <__main__.LetterField at 0x7f207d64eee0>,\n", " <__main__.Field at 0x7f207d64ef40>,\n", " <__main__.LetterField at 0x7f207d64efa0>,\n", " <__main__.Field at 0x7f207d650040>,\n", " <__main__.Field at 0x7f207d6500a0>],\n", " [<__main__.Field at 0x7f207d64de80>,\n", " <__main__.Field at 0x7f207d650130>,\n", " <__main__.Field at 0x7f207d6501c0>,\n", " <__main__.LetterField at 0x7f207d650220>,\n", " <__main__.LetterField at 0x7f207d650280>,\n", " <__main__.LetterField at 0x7f207d6502e0>,\n", " <__main__.LetterField at 0x7f207d650340>,\n", " <__main__.LetterField at 0x7f207d6503a0>,\n", " <__main__.LetterField at 0x7f207d650400>,\n", " <__main__.LetterField at 0x7f207d650460>,\n", " <__main__.LetterField at 0x7f207d6504c0>,\n", " <__main__.LetterField at 0x7f207d650520>,\n", " <__main__.LetterField at 0x7f207d650580>,\n", " <__main__.LetterField at 0x7f207d6505e0>,\n", " <__main__.Field at 0x7f207d650640>,\n", " <__main__.Field at 0x7f207d6506a0>,\n", " <__main__.Field at 0x7f207d650700>,\n", " <__main__.Field at 0x7f207d650760>,\n", " <__main__.Field at 0x7f207d6507c0>,\n", " <__main__.LetterField at 0x7f207d650820>,\n", " <__main__.HintField at 0x7f207d64bbb0>,\n", " <__main__.Field at 0x7f207d6508e0>,\n", " <__main__.Field at 0x7f207d650940>,\n", " <__main__.Field at 0x7f207d6509a0>,\n", " <__main__.Field at 0x7f207d650a00>,\n", " <__main__.Field at 0x7f207d650a60>,\n", " <__main__.Field at 0x7f207d650ac0>,\n", " <__main__.LetterField at 0x7f207d650b20>,\n", " <__main__.Field at 0x7f207d650b80>,\n", " <__main__.LetterField at 0x7f207d650be0>,\n", " <__main__.Field at 0x7f207d650c40>,\n", " <__main__.Field at 0x7f207d650ca0>,\n", " <__main__.LetterField at 0x7f207d650d00>,\n", " <__main__.Field at 0x7f207d650d60>,\n", " <__main__.LetterField at 0x7f207d650dc0>,\n", " <__main__.Field at 0x7f207d650e20>,\n", " <__main__.Field at 0x7f207d650e80>,\n", " <__main__.Field at 0x7f207d650ee0>,\n", " <__main__.LetterField at 0x7f207d650f40>,\n", " <__main__.Field at 0x7f207d650fa0>,\n", " <__main__.LetterField at 0x7f207d651040>,\n", " <__main__.LetterField at 0x7f207d6510a0>,\n", " <__main__.LetterField at 0x7f207d651100>,\n", " <__main__.LetterField at 0x7f207d651160>,\n", " <__main__.LetterField at 0x7f207d6511c0>,\n", " <__main__.Field at 0x7f207d651220>,\n", " <__main__.LetterField at 0x7f207d651280>,\n", " <__main__.HintField at 0x7f207ef54e20>,\n", " <__main__.Field at 0x7f207d651340>],\n", " [<__main__.HintField at 0x7f207ebe9580>,\n", " <__main__.LetterField at 0x7f207d6513d0>,\n", " <__main__.HintField at 0x7f207d65e400>,\n", " <__main__.Field at 0x7f207d6514c0>,\n", " <__main__.Field at 0x7f207d651520>,\n", " <__main__.LetterField at 0x7f207d651580>,\n", " <__main__.Field at 0x7f207d6515e0>,\n", " <__main__.Field at 0x7f207d651640>,\n", " <__main__.Field at 0x7f207d6516a0>,\n", " <__main__.Field at 0x7f207d651700>,\n", " <__main__.Field at 0x7f207d651760>,\n", " <__main__.LetterField at 0x7f207d6517c0>,\n", " <__main__.Field at 0x7f207d651820>,\n", " <__main__.Field at 0x7f207d651880>,\n", " <__main__.Field at 0x7f207d6518e0>,\n", " <__main__.Field at 0x7f207d651940>,\n", " <__main__.LetterField at 0x7f207d6519a0>,\n", " <__main__.LetterField at 0x7f207d651a00>,\n", " <__main__.LetterField at 0x7f207d651a60>,\n", " <__main__.LetterField at 0x7f207d651ac0>,\n", " <__main__.LetterField at 0x7f207d651b20>,\n", " <__main__.LetterField at 0x7f207d651b80>,\n", " <__main__.LetterField at 0x7f207d651be0>,\n", " <__main__.LetterField at 0x7f207d651c40>,\n", " <__main__.LetterField at 0x7f207d651ca0>,\n", " <__main__.LetterField at 0x7f207d651d00>,\n", " <__main__.Field at 0x7f207d651d60>,\n", " <__main__.LetterField at 0x7f207d651dc0>,\n", " <__main__.Field at 0x7f207d651e20>,\n", " <__main__.LetterField at 0x7f207d651e80>,\n", " <__main__.Field at 0x7f207d651ee0>,\n", " <__main__.Field at 0x7f207d651f40>,\n", " <__main__.LetterField at 0x7f207d651fa0>,\n", " <__main__.Field at 0x7f207d654040>,\n", " <__main__.LetterField at 0x7f207d6540a0>,\n", " <__main__.LetterField at 0x7f207d654100>,\n", " <__main__.LetterField at 0x7f207d654160>,\n", " <__main__.LetterField at 0x7f207d6541c0>,\n", " <__main__.LetterField at 0x7f207d654220>,\n", " <__main__.LetterField at 0x7f207d654280>,\n", " <__main__.Field at 0x7f207d6542e0>,\n", " <__main__.Field at 0x7f207d654340>,\n", " <__main__.LetterField at 0x7f207d6543a0>,\n", " <__main__.Field at 0x7f207d654400>,\n", " <__main__.Field at 0x7f207d654460>,\n", " <__main__.Field at 0x7f207d6544c0>,\n", " <__main__.LetterField at 0x7f207d654520>,\n", " <__main__.Field at 0x7f207d654580>,\n", " <__main__.LetterField at 0x7f207d6545e0>],\n", " [<__main__.Field at 0x7f207d651400>,\n", " <__main__.LetterField at 0x7f207d654670>,\n", " <__main__.Field at 0x7f207d654700>,\n", " <__main__.LetterField at 0x7f207d654760>,\n", " <__main__.Field at 0x7f207d6547c0>,\n", " <__main__.LetterField at 0x7f207d654820>,\n", " <__main__.HintField at 0x7f207d648a00>,\n", " <__main__.Field at 0x7f207d6548e0>,\n", " <__main__.HintField at 0x7f207d65ff40>,\n", " <__main__.Field at 0x7f207d6549a0>,\n", " <__main__.Field at 0x7f207d654a00>,\n", " <__main__.LetterField at 0x7f207d654a60>,\n", " <__main__.Field at 0x7f207d654ac0>,\n", " <__main__.Field at 0x7f207d654b20>,\n", " <__main__.Field at 0x7f207d654b80>,\n", " <__main__.Field at 0x7f207d654be0>,\n", " <__main__.Field at 0x7f207d654c40>,\n", " <__main__.Field at 0x7f207d654ca0>,\n", " <__main__.Field at 0x7f207d654d00>,\n", " <__main__.LetterField at 0x7f207d654d60>,\n", " <__main__.Field at 0x7f207d654dc0>,\n", " <__main__.LetterField at 0x7f207d654e20>,\n", " <__main__.Field at 0x7f207d654e80>,\n", " <__main__.Field at 0x7f207d654ee0>,\n", " <__main__.Field at 0x7f207d654f40>,\n", " <__main__.Field at 0x7f207d654fa0>,\n", " <__main__.Field at 0x7f207d655040>,\n", " <__main__.LetterField at 0x7f207d6550a0>,\n", " <__main__.Field at 0x7f207d655100>,\n", " <__main__.LetterField at 0x7f207d655160>,\n", " <__main__.Field at 0x7f207d6551c0>,\n", " <__main__.Field at 0x7f207d655220>,\n", " <__main__.LetterField at 0x7f207d655280>,\n", " <__main__.Field at 0x7f207d6552e0>,\n", " <__main__.LetterField at 0x7f207d655340>,\n", " <__main__.HintField at 0x7f207d659e80>,\n", " <__main__.Field at 0x7f207d655400>,\n", " <__main__.Field at 0x7f207d655460>,\n", " <__main__.LetterField at 0x7f207d6554c0>,\n", " <__main__.HintField at 0x7f207ebe2790>,\n", " <__main__.Field at 0x7f207d655580>,\n", " <__main__.Field at 0x7f207d6555e0>,\n", " <__main__.LetterField at 0x7f207d655640>,\n", " <__main__.LetterField at 0x7f207d6556a0>,\n", " <__main__.LetterField at 0x7f207d655700>,\n", " <__main__.LetterField at 0x7f207d655760>,\n", " <__main__.LetterField at 0x7f207d6557c0>,\n", " <__main__.Field at 0x7f207d655820>,\n", " <__main__.LetterField at 0x7f207d655880>],\n", " [<__main__.Field at 0x7f207d6546a0>,\n", " <__main__.LetterField at 0x7f207d655910>,\n", " <__main__.LetterField at 0x7f207d6559a0>,\n", " <__main__.LetterField at 0x7f207d655a00>,\n", " <__main__.Field at 0x7f207d655a60>,\n", " <__main__.LetterField at 0x7f207d655ac0>,\n", " <__main__.Field at 0x7f207d655b20>,\n", " <__main__.LetterField at 0x7f207d655b80>,\n", " <__main__.LetterField at 0x7f207d655be0>,\n", " <__main__.LetterField at 0x7f207d655c40>,\n", " <__main__.LetterField at 0x7f207d655ca0>,\n", " <__main__.LetterField at 0x7f207d655d00>,\n", " <__main__.LetterField at 0x7f207d655d60>,\n", " <__main__.LetterField at 0x7f207d655dc0>,\n", " <__main__.LetterField at 0x7f207d655e20>,\n", " <__main__.LetterField at 0x7f207d655e80>,\n", " <__main__.LetterField at 0x7f207d655ee0>,\n", " <__main__.LetterField at 0x7f207d655f40>,\n", " <__main__.Field at 0x7f207d655fa0>,\n", " <__main__.LetterField at 0x7f207d657040>,\n", " <__main__.LetterField at 0x7f207d6570a0>,\n", " <__main__.LetterField at 0x7f207d657100>,\n", " <__main__.LetterField at 0x7f207d657160>,\n", " <__main__.LetterField at 0x7f207d6571c0>,\n", " <__main__.LetterField at 0x7f207d657220>,\n", " <__main__.LetterField at 0x7f207d657280>,\n", " <__main__.LetterField at 0x7f207d6572e0>,\n", " <__main__.LetterField at 0x7f207d657340>,\n", " <__main__.Field at 0x7f207d6573a0>,\n", " <__main__.LetterField at 0x7f207d657400>,\n", " <__main__.HintField at 0x7f207d64a2e0>,\n", " <__main__.Field at 0x7f207d6574c0>,\n", " <__main__.LetterField at 0x7f207d657520>,\n", " <__main__.Field at 0x7f207d657580>,\n", " <__main__.LetterField at 0x7f207d6575e0>,\n", " <__main__.Field at 0x7f207d657640>,\n", " <__main__.LetterField at 0x7f207d6576a0>,\n", " <__main__.Field at 0x7f207d657700>,\n", " <__main__.LetterField at 0x7f207d657760>,\n", " <__main__.Field at 0x7f207d6577c0>,\n", " <__main__.LetterField at 0x7f207d657820>,\n", " <__main__.Field at 0x7f207d657880>,\n", " <__main__.LetterField at 0x7f207d6578e0>,\n", " <__main__.HintField at 0x7f207d6553a0>,\n", " <__main__.Field at 0x7f207d6579a0>,\n", " <__main__.Field at 0x7f207d657a00>,\n", " <__main__.Field at 0x7f207d657a60>,\n", " <__main__.Field at 0x7f207d657ac0>,\n", " <__main__.LetterField at 0x7f207d657b20>],\n", " [<__main__.Field at 0x7f207d655940>,\n", " <__main__.LetterField at 0x7f207d657bb0>,\n", " <__main__.Field at 0x7f207d657c40>,\n", " <__main__.LetterField at 0x7f207d657ca0>,\n", " <__main__.LetterField at 0x7f207d657d00>,\n", " <__main__.LetterField at 0x7f207d657d60>,\n", " <__main__.Field at 0x7f207d657dc0>,\n", " <__main__.LetterField at 0x7f207d657e20>,\n", " <__main__.Field at 0x7f207d657e80>,\n", " <__main__.LetterField at 0x7f207d657ee0>,\n", " <__main__.Field at 0x7f207d657f40>,\n", " <__main__.LetterField at 0x7f207d657fa0>,\n", " <__main__.Field at 0x7f207d659040>,\n", " <__main__.Field at 0x7f207d6590a0>,\n", " <__main__.Field at 0x7f207d659100>,\n", " <__main__.HintField at 0x7f207d655520>,\n", " <__main__.Field at 0x7f207d6591c0>,\n", " <__main__.Field at 0x7f207d659220>,\n", " <__main__.LetterField at 0x7f207d659280>,\n", " <__main__.Field at 0x7f207d6592e0>,\n", " <__main__.Field at 0x7f207d659340>,\n", " <__main__.LetterField at 0x7f207d6593a0>,\n", " <__main__.Field at 0x7f207d659400>,\n", " <__main__.Field at 0x7f207d659460>,\n", " <__main__.Field at 0x7f207d6594c0>,\n", " <__main__.Field at 0x7f207d659520>,\n", " <__main__.Field at 0x7f207d659580>,\n", " <__main__.HintField at 0x7f207d64a100>,\n", " <__main__.Field at 0x7f207d659640>,\n", " <__main__.LetterField at 0x7f207d6596a0>,\n", " <__main__.Field at 0x7f207d659700>,\n", " <__main__.LetterField at 0x7f207d659760>,\n", " <__main__.Field at 0x7f207d6597c0>,\n", " <__main__.Field at 0x7f207d659820>,\n", " <__main__.LetterField at 0x7f207d659880>,\n", " <__main__.Field at 0x7f207d6598e0>,\n", " <__main__.LetterField at 0x7f207d659940>,\n", " <__main__.Field at 0x7f207d6599a0>,\n", " <__main__.Field at 0x7f207d659a00>,\n", " <__main__.Field at 0x7f207d659a60>,\n", " <__main__.LetterField at 0x7f207d659ac0>,\n", " <__main__.Field at 0x7f207d659b20>,\n", " <__main__.LetterField at 0x7f207d659b80>,\n", " <__main__.Field at 0x7f207d659be0>,\n", " <__main__.LetterField at 0x7f207d659c40>,\n", " <__main__.Field at 0x7f207d659ca0>,\n", " <__main__.Field at 0x7f207d659d00>,\n", " <__main__.Field at 0x7f207d659d60>,\n", " <__main__.LetterField at 0x7f207d659dc0>],\n", " [<__main__.Field at 0x7f207d657be0>,\n", " <__main__.LetterField at 0x7f207d659e50>,\n", " <__main__.Field at 0x7f207d659ee0>,\n", " <__main__.LetterField at 0x7f207d659f40>,\n", " <__main__.HintField at 0x7f207d650880>,\n", " <__main__.LetterField at 0x7f207d65a040>,\n", " <__main__.LetterField at 0x7f207d65a0a0>,\n", " <__main__.LetterField at 0x7f207d65a100>,\n", " <__main__.Field at 0x7f207d65a160>,\n", " <__main__.LetterField at 0x7f207d65a1c0>,\n", " <__main__.LetterField at 0x7f207d65a220>,\n", " <__main__.LetterField at 0x7f207d65a280>,\n", " <__main__.LetterField at 0x7f207d65a2e0>,\n", " <__main__.LetterField at 0x7f207d65a340>,\n", " <__main__.LetterField at 0x7f207d65a3a0>,\n", " <__main__.LetterField at 0x7f207d65a400>,\n", " <__main__.LetterField at 0x7f207d65a460>,\n", " <__main__.Field at 0x7f207d65a4c0>,\n", " <__main__.LetterField at 0x7f207d65a520>,\n", " <__main__.Field at 0x7f207d65a580>,\n", " <__main__.Field at 0x7f207d65a5e0>,\n", " <__main__.LetterField at 0x7f207d65a640>,\n", " <__main__.LetterField at 0x7f207d65a6a0>,\n", " <__main__.LetterField at 0x7f207d65a700>,\n", " <__main__.LetterField at 0x7f207d65a760>,\n", " <__main__.LetterField at 0x7f207d65a7c0>,\n", " <__main__.HintField at 0x7f207d64db20>,\n", " <__main__.Field at 0x7f207d65a880>,\n", " <__main__.Field at 0x7f207d65a8e0>,\n", " <__main__.LetterField at 0x7f207d65a940>,\n", " <__main__.Field at 0x7f207d65a9a0>,\n", " <__main__.LetterField at 0x7f207d65aa00>,\n", " <__main__.Field at 0x7f207d65aa60>,\n", " <__main__.HintField at 0x7f207d65c520>,\n", " <__main__.LetterField at 0x7f207d65ab20>,\n", " <__main__.LetterField at 0x7f207d65ab80>,\n", " <__main__.LetterField at 0x7f207d65abe0>,\n", " <__main__.LetterField at 0x7f207d65ac40>,\n", " <__main__.LetterField at 0x7f207d65aca0>,\n", " <__main__.LetterField at 0x7f207d65ad00>,\n", " <__main__.LetterField at 0x7f207d65ad60>,\n", " <__main__.LetterField at 0x7f207d65adc0>,\n", " <__main__.LetterField at 0x7f207d65ae20>,\n", " <__main__.Field at 0x7f207d65ae80>,\n", " <__main__.LetterField at 0x7f207d65aee0>,\n", " <__main__.LetterField at 0x7f207d65af40>,\n", " <__main__.LetterField at 0x7f207d65afa0>,\n", " <__main__.LetterField at 0x7f207d65c040>,\n", " <__main__.LetterField at 0x7f207d65c0a0>],\n", " [<__main__.HintField at 0x7f207ec58ac0>,\n", " <__main__.Field at 0x7f207d65c130>,\n", " <__main__.Field at 0x7f207d65c1c0>,\n", " <__main__.LetterField at 0x7f207d65c220>,\n", " <__main__.Field at 0x7f207d65c280>,\n", " <__main__.Field at 0x7f207d65c2e0>,\n", " <__main__.Field at 0x7f207d65c340>,\n", " <__main__.LetterField at 0x7f207d65c3a0>,\n", " <__main__.Field at 0x7f207d65c400>,\n", " <__main__.Field at 0x7f207d65c460>,\n", " <__main__.Field at 0x7f207d65c4c0>,\n", " <__main__.HintField at 0x7f207d668160>,\n", " <__main__.Field at 0x7f207d65c580>,\n", " <__main__.Field at 0x7f207d65c5e0>,\n", " <__main__.Field at 0x7f207d65c640>,\n", " <__main__.Field at 0x7f207d65c6a0>,\n", " <__main__.LetterField at 0x7f207d65c700>,\n", " <__main__.Field at 0x7f207d65c760>,\n", " <__main__.LetterField at 0x7f207d65c7c0>,\n", " <__main__.Field at 0x7f207d65c820>,\n", " <__main__.Field at 0x7f207d65c880>,\n", " <__main__.LetterField at 0x7f207d65c8e0>,\n", " <__main__.Field at 0x7f207d65c940>,\n", " <__main__.Field at 0x7f207d65c9a0>,\n", " <__main__.HintField at 0x7f207ebee400>,\n", " <__main__.Field at 0x7f207d65ca60>,\n", " <__main__.Field at 0x7f207d65cac0>,\n", " <__main__.LetterField at 0x7f207d65cb20>,\n", " <__main__.Field at 0x7f207d65cb80>,\n", " <__main__.LetterField at 0x7f207d65cbe0>,\n", " <__main__.LetterField at 0x7f207d65cc40>,\n", " <__main__.LetterField at 0x7f207d65cca0>,\n", " <__main__.LetterField at 0x7f207d65cd00>,\n", " <__main__.LetterField at 0x7f207d65cd60>,\n", " <__main__.LetterField at 0x7f207d65cdc0>,\n", " <__main__.Field at 0x7f207d65ce20>,\n", " <__main__.LetterField at 0x7f207d65ce80>,\n", " <__main__.Field at 0x7f207d65cee0>,\n", " <__main__.Field at 0x7f207d65cf40>,\n", " <__main__.Field at 0x7f207d65cfa0>,\n", " <__main__.LetterField at 0x7f207d65e040>,\n", " <__main__.Field at 0x7f207d65e0a0>,\n", " <__main__.LetterField at 0x7f207d65e100>,\n", " <__main__.Field at 0x7f207d65e160>,\n", " <__main__.LetterField at 0x7f207d65e1c0>,\n", " <__main__.Field at 0x7f207d65e220>,\n", " <__main__.Field at 0x7f207d65e280>,\n", " <__main__.Field at 0x7f207d65e2e0>,\n", " <__main__.Field at 0x7f207d65e340>],\n", " [<__main__.Field at 0x7f207d65c160>,\n", " <__main__.Field at 0x7f207d65e3d0>,\n", " <__main__.Field at 0x7f207d65e460>,\n", " <__main__.LetterField at 0x7f207d65e4c0>,\n", " <__main__.Field at 0x7f207d65e520>,\n", " <__main__.Field at 0x7f207d65e580>,\n", " <__main__.LetterField at 0x7f207d65e5e0>,\n", " <__main__.LetterField at 0x7f207d65e640>,\n", " <__main__.LetterField at 0x7f207d65e6a0>,\n", " <__main__.LetterField at 0x7f207d65e700>,\n", " <__main__.LetterField at 0x7f207d65e760>,\n", " <__main__.LetterField at 0x7f207d65e7c0>,\n", " <__main__.LetterField at 0x7f207d65e820>,\n", " <__main__.LetterField at 0x7f207d65e880>,\n", " <__main__.Field at 0x7f207d65e8e0>,\n", " <__main__.Field at 0x7f207d65e940>,\n", " <__main__.LetterField at 0x7f207d65e9a0>,\n", " <__main__.Field at 0x7f207d65ea00>,\n", " <__main__.LetterField at 0x7f207d65ea60>,\n", " <__main__.LetterField at 0x7f207d65eac0>,\n", " <__main__.LetterField at 0x7f207d65eb20>,\n", " <__main__.LetterField at 0x7f207d65eb80>,\n", " <__main__.LetterField at 0x7f207d65ebe0>,\n", " <__main__.LetterField at 0x7f207d65ec40>,\n", " <__main__.LetterField at 0x7f207d65eca0>,\n", " <__main__.LetterField at 0x7f207d65ed00>,\n", " <__main__.Field at 0x7f207d65ed60>,\n", " <__main__.LetterField at 0x7f207d65edc0>,\n", " <__main__.Field at 0x7f207d65ee20>,\n", " <__main__.LetterField at 0x7f207d65ee80>,\n", " <__main__.Field at 0x7f207d65eee0>,\n", " <__main__.LetterField at 0x7f207d65ef40>,\n", " <__main__.Field at 0x7f207d65efa0>,\n", " <__main__.Field at 0x7f207d65f040>,\n", " <__main__.Field at 0x7f207d65f0a0>,\n", " <__main__.LetterField at 0x7f207d65f100>,\n", " <__main__.LetterField at 0x7f207d65f160>,\n", " <__main__.LetterField at 0x7f207d65f1c0>,\n", " <__main__.LetterField at 0x7f207d65f220>,\n", " <__main__.Field at 0x7f207d65f280>,\n", " <__main__.LetterField at 0x7f207d65f2e0>,\n", " <__main__.Field at 0x7f207d65f340>,\n", " <__main__.Field at 0x7f207d65f3a0>,\n", " <__main__.LetterField at 0x7f207d65f400>,\n", " <__main__.LetterField at 0x7f207d65f460>,\n", " <__main__.LetterField at 0x7f207d65f4c0>,\n", " <__main__.LetterField at 0x7f207d65f520>,\n", " <__main__.LetterField at 0x7f207d65f580>,\n", " <__main__.Field at 0x7f207d65f5e0>],\n", " [<__main__.HintField at 0x7f207d654880>,\n", " <__main__.LetterField at 0x7f207d65f670>,\n", " <__main__.LetterField at 0x7f207d65f700>,\n", " <__main__.LetterField at 0x7f207d65f760>,\n", " <__main__.LetterField at 0x7f207d65f7c0>,\n", " <__main__.Field at 0x7f207d65f820>,\n", " <__main__.Field at 0x7f207d65f880>,\n", " <__main__.LetterField at 0x7f207d65f8e0>,\n", " <__main__.Field at 0x7f207d65f940>,\n", " <__main__.Field at 0x7f207d65f9a0>,\n", " <__main__.Field at 0x7f207d65fa00>,\n", " <__main__.Field at 0x7f207d65fa60>,\n", " <__main__.LetterField at 0x7f207d65fac0>,\n", " <__main__.Field at 0x7f207d65fb20>,\n", " <__main__.HintField at 0x7f207d669b80>,\n", " <__main__.Field at 0x7f207d65fbe0>,\n", " <__main__.LetterField at 0x7f207d65fc40>,\n", " <__main__.Field at 0x7f207d65fca0>,\n", " <__main__.LetterField at 0x7f207d65fd00>,\n", " <__main__.Field at 0x7f207d65fd60>,\n", " <__main__.Field at 0x7f207d65fdc0>,\n", " <__main__.Field at 0x7f207d65fe20>,\n", " <__main__.HintField at 0x7f207ec58c10>,\n", " <__main__.Field at 0x7f207d65fee0>,\n", " <__main__.HintField at 0x7f207d665b80>,\n", " <__main__.Field at 0x7f207d65ffa0>,\n", " <__main__.LetterField at 0x7f207d661040>,\n", " <__main__.LetterField at 0x7f207d6610a0>,\n", " <__main__.LetterField at 0x7f207d661100>,\n", " <__main__.HintField at 0x7f207ebe2940>,\n", " <__main__.Field at 0x7f207d6611c0>,\n", " <__main__.LetterField at 0x7f207d661220>,\n", " <__main__.LetterField at 0x7f207d661280>,\n", " <__main__.HintField at 0x7f207d661160>,\n", " <__main__.Field at 0x7f207d661340>,\n", " <__main__.Field at 0x7f207d6613a0>,\n", " <__main__.Field at 0x7f207d661400>,\n", " <__main__.Field at 0x7f207d661460>,\n", " <__main__.Field at 0x7f207d6614c0>,\n", " <__main__.Field at 0x7f207d661520>,\n", " <__main__.LetterField at 0x7f207d661580>,\n", " <__main__.Field at 0x7f207d6615e0>,\n", " <__main__.Field at 0x7f207d661640>,\n", " <__main__.Field at 0x7f207d6616a0>,\n", " <__main__.LetterField at 0x7f207d661700>,\n", " <__main__.Field at 0x7f207d661760>,\n", " <__main__.Field at 0x7f207d6617c0>,\n", " <__main__.Field at 0x7f207d661820>,\n", " <__main__.LetterField at 0x7f207d661880>],\n", " [<__main__.Field at 0x7f207d65f6a0>,\n", " <__main__.LetterField at 0x7f207d661910>,\n", " <__main__.Field at 0x7f207d6619a0>,\n", " <__main__.LetterField at 0x7f207d661a00>,\n", " <__main__.Field at 0x7f207d661a60>,\n", " <__main__.Field at 0x7f207d661ac0>,\n", " <__main__.Field at 0x7f207d661b20>,\n", " <__main__.LetterField at 0x7f207d661b80>,\n", " <__main__.Field at 0x7f207d661be0>,\n", " <__main__.Field at 0x7f207d661c40>,\n", " <__main__.LetterField at 0x7f207d661ca0>,\n", " <__main__.LetterField at 0x7f207d661d00>,\n", " <__main__.LetterField at 0x7f207d661d60>,\n", " <__main__.Field at 0x7f207d661dc0>,\n", " <__main__.LetterField at 0x7f207d661e20>,\n", " <__main__.LetterField at 0x7f207d661e80>,\n", " <__main__.LetterField at 0x7f207d661ee0>,\n", " <__main__.LetterField at 0x7f207d661f40>,\n", " <__main__.LetterField at 0x7f207d661fa0>,\n", " <__main__.LetterField at 0x7f207d662040>,\n", " <__main__.Field at 0x7f207d6620a0>,\n", " <__main__.Field at 0x7f207d662100>,\n", " <__main__.Field at 0x7f207d662160>,\n", " <__main__.LetterField at 0x7f207d6621c0>,\n", " <__main__.Field at 0x7f207d662220>,\n", " <__main__.LetterField at 0x7f207d662280>,\n", " <__main__.Field at 0x7f207d6622e0>,\n", " <__main__.LetterField at 0x7f207d662340>,\n", " <__main__.Field at 0x7f207d6623a0>,\n", " <__main__.LetterField at 0x7f207d662400>,\n", " <__main__.LetterField at 0x7f207d662460>,\n", " <__main__.LetterField at 0x7f207d6624c0>,\n", " <__main__.Field at 0x7f207d662520>,\n", " <__main__.Field at 0x7f207d662580>,\n", " <__main__.LetterField at 0x7f207d6625e0>,\n", " <__main__.Field at 0x7f207d662640>,\n", " <__main__.HintField at 0x7f207d66fbe0>,\n", " <__main__.Field at 0x7f207d662700>,\n", " <__main__.Field at 0x7f207d662760>,\n", " <__main__.LetterField at 0x7f207d6627c0>,\n", " <__main__.LetterField at 0x7f207d662820>,\n", " <__main__.LetterField at 0x7f207d662880>,\n", " <__main__.LetterField at 0x7f207d6628e0>,\n", " <__main__.LetterField at 0x7f207d662940>,\n", " <__main__.LetterField at 0x7f207d6629a0>,\n", " <__main__.LetterField at 0x7f207d662a00>,\n", " <__main__.Field at 0x7f207d662a60>,\n", " <__main__.Field at 0x7f207d662ac0>,\n", " <__main__.LetterField at 0x7f207d662b20>],\n", " [<__main__.Field at 0x7f207d661940>,\n", " <__main__.LetterField at 0x7f207d662bb0>,\n", " <__main__.LetterField at 0x7f207d662c40>,\n", " <__main__.LetterField at 0x7f207d662ca0>,\n", " <__main__.LetterField at 0x7f207d662d00>,\n", " <__main__.LetterField at 0x7f207d662d60>,\n", " <__main__.LetterField at 0x7f207d662dc0>,\n", " <__main__.LetterField at 0x7f207d662e20>,\n", " <__main__.LetterField at 0x7f207d662e80>,\n", " <__main__.LetterField at 0x7f207d662ee0>,\n", " <__main__.Field at 0x7f207d662f40>,\n", " <__main__.Field at 0x7f207d662fa0>,\n", " <__main__.LetterField at 0x7f207d665040>,\n", " <__main__.Field at 0x7f207d6650a0>,\n", " <__main__.Field at 0x7f207d665100>,\n", " <__main__.LetterField at 0x7f207d665160>,\n", " <__main__.Field at 0x7f207d6651c0>,\n", " <__main__.LetterField at 0x7f207d665220>,\n", " <__main__.Field at 0x7f207d665280>,\n", " <__main__.Field at 0x7f207d6652e0>,\n", " <__main__.LetterField at 0x7f207d665340>,\n", " <__main__.LetterField at 0x7f207d6653a0>,\n", " <__main__.LetterField at 0x7f207d665400>,\n", " <__main__.LetterField at 0x7f207d665460>,\n", " <__main__.LetterField at 0x7f207d6654c0>,\n", " <__main__.LetterField at 0x7f207d665520>,\n", " <__main__.LetterField at 0x7f207d665580>,\n", " <__main__.LetterField at 0x7f207d6655e0>,\n", " <__main__.LetterField at 0x7f207d665640>,\n", " <__main__.Field at 0x7f207d6656a0>,\n", " <__main__.Field at 0x7f207d665700>,\n", " <__main__.LetterField at 0x7f207d665760>,\n", " <__main__.LetterField at 0x7f207d6657c0>,\n", " <__main__.LetterField at 0x7f207d665820>,\n", " <__main__.LetterField at 0x7f207d665880>,\n", " <__main__.LetterField at 0x7f207d6658e0>,\n", " <__main__.Field at 0x7f207d665940>,\n", " <__main__.LetterField at 0x7f207d6659a0>,\n", " <__main__.Field at 0x7f207d665a00>,\n", " <__main__.Field at 0x7f207d665a60>,\n", " <__main__.LetterField at 0x7f207d665ac0>,\n", " <__main__.Field at 0x7f207d665b20>,\n", " <__main__.HintField at 0x7f207ebe9070>,\n", " <__main__.Field at 0x7f207d665be0>,\n", " <__main__.Field at 0x7f207d665c40>,\n", " <__main__.Field at 0x7f207d665ca0>,\n", " <__main__.Field at 0x7f207d665d00>,\n", " <__main__.Field at 0x7f207d665d60>,\n", " <__main__.LetterField at 0x7f207d665dc0>],\n", " [<__main__.Field at 0x7f207d662be0>,\n", " <__main__.LetterField at 0x7f207d665e50>,\n", " <__main__.Field at 0x7f207d665ee0>,\n", " <__main__.LetterField at 0x7f207d665f40>,\n", " <__main__.HintField at 0x7f207ef5da30>,\n", " <__main__.Field at 0x7f207d666040>,\n", " <__main__.Field at 0x7f207d6660a0>,\n", " <__main__.LetterField at 0x7f207d666100>,\n", " <__main__.Field at 0x7f207d666160>,\n", " <__main__.Field at 0x7f207d6661c0>,\n", " <__main__.LetterField at 0x7f207d666220>,\n", " <__main__.HintField at 0x7f207d654940>,\n", " <__main__.Field at 0x7f207d6662e0>,\n", " <__main__.LetterField at 0x7f207d666340>,\n", " <__main__.LetterField at 0x7f207d6663a0>,\n", " <__main__.LetterField at 0x7f207d666400>,\n", " <__main__.Field at 0x7f207d666460>,\n", " <__main__.LetterField at 0x7f207d6664c0>,\n", " <__main__.Field at 0x7f207d666520>,\n", " <__main__.Field at 0x7f207d666580>,\n", " <__main__.LetterField at 0x7f207d6665e0>,\n", " <__main__.Field at 0x7f207d666640>,\n", " <__main__.Field at 0x7f207d6666a0>,\n", " <__main__.LetterField at 0x7f207d666700>,\n", " <__main__.Field at 0x7f207d666760>,\n", " <__main__.LetterField at 0x7f207d6667c0>,\n", " <__main__.Field at 0x7f207d666820>,\n", " <__main__.LetterField at 0x7f207d666880>,\n", " <__main__.HintField at 0x7f207ef54fa0>,\n", " <__main__.Field at 0x7f207d666940>,\n", " <__main__.Field at 0x7f207d6669a0>,\n", " <__main__.LetterField at 0x7f207d666a00>,\n", " <__main__.Field at 0x7f207d666a60>,\n", " <__main__.Field at 0x7f207d666ac0>,\n", " <__main__.LetterField at 0x7f207d666b20>,\n", " <__main__.Field at 0x7f207d666b80>,\n", " <__main__.Field at 0x7f207d666be0>,\n", " <__main__.LetterField at 0x7f207d666c40>,\n", " <__main__.Field at 0x7f207d666ca0>,\n", " <__main__.Field at 0x7f207d666d00>,\n", " <__main__.Field at 0x7f207d666d60>,\n", " <__main__.LetterField at 0x7f207d666dc0>,\n", " <__main__.Field at 0x7f207d666e20>,\n", " <__main__.LetterField at 0x7f207d666e80>,\n", " <__main__.Field at 0x7f207d666ee0>,\n", " <__main__.Field at 0x7f207d666f40>,\n", " <__main__.Field at 0x7f207d666fa0>,\n", " <__main__.Field at 0x7f207d668040>,\n", " <__main__.LetterField at 0x7f207d6680a0>],\n", " [<__main__.Field at 0x7f207d665e80>,\n", " <__main__.LetterField at 0x7f207d668130>,\n", " <__main__.LetterField at 0x7f207d6681c0>,\n", " <__main__.Field at 0x7f207d668220>,\n", " <__main__.LetterField at 0x7f207d668280>,\n", " <__main__.LetterField at 0x7f207d6682e0>,\n", " <__main__.LetterField at 0x7f207d668340>,\n", " <__main__.LetterField at 0x7f207d6683a0>,\n", " <__main__.LetterField at 0x7f207d668400>,\n", " <__main__.LetterField at 0x7f207d668460>,\n", " <__main__.LetterField at 0x7f207d6684c0>,\n", " <__main__.LetterField at 0x7f207d668520>,\n", " <__main__.LetterField at 0x7f207d668580>,\n", " <__main__.Field at 0x7f207d6685e0>,\n", " <__main__.Field at 0x7f207d668640>,\n", " <__main__.LetterField at 0x7f207d6686a0>,\n", " <__main__.Field at 0x7f207d668700>,\n", " <__main__.LetterField at 0x7f207d668760>,\n", " <__main__.Field at 0x7f207d6687c0>,\n", " <__main__.Field at 0x7f207d668820>,\n", " <__main__.LetterField at 0x7f207d668880>,\n", " <__main__.Field at 0x7f207d6688e0>,\n", " <__main__.Field at 0x7f207d668940>,\n", " <__main__.LetterField at 0x7f207d6689a0>,\n", " <__main__.Field at 0x7f207d668a00>,\n", " <__main__.Field at 0x7f207d668a60>,\n", " <__main__.Field at 0x7f207d668ac0>,\n", " <__main__.LetterField at 0x7f207d668b20>,\n", " <__main__.Field at 0x7f207d668b80>,\n", " <__main__.LetterField at 0x7f207d668be0>,\n", " <__main__.Field at 0x7f207d668c40>,\n", " <__main__.LetterField at 0x7f207d668ca0>,\n", " <__main__.Field at 0x7f207d668d00>,\n", " <__main__.Field at 0x7f207d668d60>,\n", " <__main__.LetterField at 0x7f207d668dc0>,\n", " <__main__.Field at 0x7f207d668e20>,\n", " <__main__.Field at 0x7f207d668e80>,\n", " <__main__.LetterField at 0x7f207d668ee0>,\n", " <__main__.LetterField at 0x7f207d668f40>,\n", " <__main__.LetterField at 0x7f207d668fa0>,\n", " <__main__.LetterField at 0x7f207d669040>,\n", " <__main__.LetterField at 0x7f207d6690a0>,\n", " <__main__.LetterField at 0x7f207d669100>,\n", " <__main__.LetterField at 0x7f207d669160>,\n", " <__main__.LetterField at 0x7f207d6691c0>,\n", " <__main__.LetterField at 0x7f207d669220>,\n", " <__main__.Field at 0x7f207d669280>,\n", " <__main__.Field at 0x7f207d6692e0>,\n", " <__main__.LetterField at 0x7f207d669340>],\n", " [<__main__.HintField at 0x7f207ebe9400>,\n", " <__main__.LetterField at 0x7f207d6693d0>,\n", " <__main__.LetterField at 0x7f207d669460>,\n", " <__main__.Field at 0x7f207d6694c0>,\n", " <__main__.Field at 0x7f207d669520>,\n", " <__main__.LetterField at 0x7f207d669580>,\n", " <__main__.Field at 0x7f207d6695e0>,\n", " <__main__.LetterField at 0x7f207d669640>,\n", " <__main__.Field at 0x7f207d6696a0>,\n", " <__main__.Field at 0x7f207d669700>,\n", " <__main__.LetterField at 0x7f207d669760>,\n", " <__main__.Field at 0x7f207d6697c0>,\n", " <__main__.LetterField at 0x7f207d669820>,\n", " <__main__.Field at 0x7f207d669880>,\n", " <__main__.Field at 0x7f207d6698e0>,\n", " <__main__.LetterField at 0x7f207d669940>,\n", " <__main__.Field at 0x7f207d6699a0>,\n", " <__main__.LetterField at 0x7f207d669a00>,\n", " <__main__.Field at 0x7f207d669a60>,\n", " <__main__.Field at 0x7f207d669ac0>,\n", " <__main__.LetterField at 0x7f207d669b20>,\n", " <__main__.HintField at 0x7f207ec58f70>,\n", " <__main__.Field at 0x7f207d669be0>,\n", " <__main__.LetterField at 0x7f207d669c40>,\n", " <__main__.Field at 0x7f207d669ca0>,\n", " <__main__.LetterField at 0x7f207d669d00>,\n", " <__main__.LetterField at 0x7f207d669d60>,\n", " <__main__.LetterField at 0x7f207d669dc0>,\n", " <__main__.LetterField at 0x7f207d669e20>,\n", " <__main__.LetterField at 0x7f207d669e80>,\n", " <__main__.LetterField at 0x7f207d669ee0>,\n", " <__main__.LetterField at 0x7f207d669f40>,\n", " <__main__.LetterField at 0x7f207d669fa0>,\n", " <__main__.Field at 0x7f207d66b040>,\n", " <__main__.LetterField at 0x7f207d66b0a0>,\n", " <__main__.Field at 0x7f207d66b100>,\n", " <__main__.Field at 0x7f207d66b160>,\n", " <__main__.LetterField at 0x7f207d66b1c0>,\n", " <__main__.Field at 0x7f207d66b220>,\n", " <__main__.Field at 0x7f207d66b280>,\n", " <__main__.Field at 0x7f207d66b2e0>,\n", " <__main__.LetterField at 0x7f207d66b340>,\n", " <__main__.Field at 0x7f207d66b3a0>,\n", " <__main__.LetterField at 0x7f207d66b400>,\n", " <__main__.Field at 0x7f207d66b460>,\n", " <__main__.Field at 0x7f207d66b4c0>,\n", " <__main__.Field at 0x7f207d66b520>,\n", " <__main__.Field at 0x7f207d66b580>,\n", " <__main__.LetterField at 0x7f207d66b5e0>],\n", " [<__main__.Field at 0x7f207d669400>,\n", " <__main__.LetterField at 0x7f207d66b670>,\n", " <__main__.LetterField at 0x7f207d66b700>,\n", " <__main__.Field at 0x7f207d66b760>,\n", " <__main__.Field at 0x7f207d66b7c0>,\n", " <__main__.LetterField at 0x7f207d66b820>,\n", " <__main__.Field at 0x7f207d66b880>,\n", " <__main__.Field at 0x7f207d66b8e0>,\n", " <__main__.Field at 0x7f207d66b940>,\n", " <__main__.Field at 0x7f207d66b9a0>,\n", " <__main__.LetterField at 0x7f207d66ba00>,\n", " <__main__.Field at 0x7f207d66ba60>,\n", " <__main__.LetterField at 0x7f207d66bac0>,\n", " <__main__.Field at 0x7f207d66bb20>,\n", " <__main__.Field at 0x7f207d66bb80>,\n", " <__main__.LetterField at 0x7f207d66bbe0>,\n", " <__main__.Field at 0x7f207d66bc40>,\n", " <__main__.LetterField at 0x7f207d66bca0>,\n", " <__main__.Field at 0x7f207d66bd00>,\n", " <__main__.Field at 0x7f207d66bd60>,\n", " <__main__.LetterField at 0x7f207d66bdc0>,\n", " <__main__.Field at 0x7f207d66be20>,\n", " <__main__.Field at 0x7f207d66be80>,\n", " <__main__.Field at 0x7f207d66bee0>,\n", " <__main__.Field at 0x7f207d66bf40>,\n", " <__main__.Field at 0x7f207d66bfa0>,\n", " <__main__.Field at 0x7f207d66c040>,\n", " <__main__.LetterField at 0x7f207d66c0a0>,\n", " <__main__.Field at 0x7f207d66c100>,\n", " <__main__.LetterField at 0x7f207d66c160>,\n", " <__main__.Field at 0x7f207d66c1c0>,\n", " <__main__.LetterField at 0x7f207d66c220>,\n", " <__main__.Field at 0x7f207d66c280>,\n", " <__main__.LetterField at 0x7f207d66c2e0>,\n", " <__main__.LetterField at 0x7f207d66c340>,\n", " <__main__.LetterField at 0x7f207d66c3a0>,\n", " <__main__.LetterField at 0x7f207d66c400>,\n", " <__main__.LetterField at 0x7f207d66c460>,\n", " <__main__.LetterField at 0x7f207d66c4c0>,\n", " <__main__.LetterField at 0x7f207d66c520>,\n", " <__main__.Field at 0x7f207d66c580>,\n", " <__main__.LetterField at 0x7f207d66c5e0>,\n", " <__main__.LetterField at 0x7f207d66c640>,\n", " <__main__.LetterField at 0x7f207d66c6a0>,\n", " <__main__.LetterField at 0x7f207d66c700>,\n", " <__main__.LetterField at 0x7f207d66c760>,\n", " <__main__.LetterField at 0x7f207d66c7c0>,\n", " <__main__.LetterField at 0x7f207d66c820>,\n", " <__main__.LetterField at 0x7f207d66c880>],\n", " [<__main__.Field at 0x7f207d66b6a0>,\n", " <__main__.Field at 0x7f207d66c910>,\n", " <__main__.LetterField at 0x7f207d66c9a0>,\n", " <__main__.LetterField at 0x7f207d66ca00>,\n", " <__main__.LetterField at 0x7f207d66ca60>,\n", " <__main__.LetterField at 0x7f207d66cac0>,\n", " <__main__.Field at 0x7f207d66cb20>,\n", " <__main__.Field at 0x7f207d66cb80>,\n", " <__main__.Field at 0x7f207d66cbe0>,\n", " <__main__.LetterField at 0x7f207d66cc40>,\n", " <__main__.LetterField at 0x7f207d66cca0>,\n", " <__main__.LetterField at 0x7f207d66cd00>,\n", " <__main__.LetterField at 0x7f207d66cd60>,\n", " <__main__.LetterField at 0x7f207d66cdc0>,\n", " <__main__.Field at 0x7f207d66ce20>,\n", " <__main__.LetterField at 0x7f207d66ce80>,\n", " <__main__.Field at 0x7f207d66cee0>,\n", " <__main__.Field at 0x7f207d66cf40>,\n", " <__main__.Field at 0x7f207d66cfa0>,\n", " <__main__.Field at 0x7f207d66f040>,\n", " <__main__.Field at 0x7f207d66f0a0>,\n", " <__main__.Field at 0x7f207d66f100>,\n", " <__main__.Field at 0x7f207d66f160>,\n", " <__main__.LetterField at 0x7f207d66f1c0>,\n", " <__main__.LetterField at 0x7f207d66f220>,\n", " <__main__.LetterField at 0x7f207d66f280>,\n", " <__main__.LetterField at 0x7f207d66f2e0>,\n", " <__main__.LetterField at 0x7f207d66f340>,\n", " <__main__.LetterField at 0x7f207d66f3a0>,\n", " <__main__.LetterField at 0x7f207d66f400>,\n", " <__main__.Field at 0x7f207d66f460>,\n", " <__main__.Field at 0x7f207d66f4c0>,\n", " <__main__.Field at 0x7f207d66f520>,\n", " <__main__.Field at 0x7f207d66f580>,\n", " <__main__.Field at 0x7f207d66f5e0>,\n", " <__main__.Field at 0x7f207d66f640>,\n", " <__main__.Field at 0x7f207d66f6a0>,\n", " <__main__.LetterField at 0x7f207d66f700>,\n", " <__main__.Field at 0x7f207d66f760>,\n", " <__main__.Field at 0x7f207d66f7c0>,\n", " <__main__.Field at 0x7f207d66f820>,\n", " <__main__.LetterField at 0x7f207d66f880>,\n", " <__main__.Field at 0x7f207d66f8e0>,\n", " <__main__.Field at 0x7f207d66f940>,\n", " <__main__.Field at 0x7f207d66f9a0>,\n", " <__main__.Field at 0x7f207d66fa00>,\n", " <__main__.Field at 0x7f207d66fa60>,\n", " <__main__.Field at 0x7f207d66fac0>,\n", " <__main__.Field at 0x7f207d66fb20>]]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cw._grid._grid" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "name": "python3", "display_name": "Python 3.9.5 64-bit" }, "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.9.5" }, "interpreter": { "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" } }, "nbformat": 4, "nbformat_minor": 4 }