from itertools import chain from pathlib import Path import pytest from boggler.boggler_utils import BoggleBoard, build_full_boggle_tree WORDLISTS_DIR = Path("./boggler/wordlists/dwyl/").absolute() @pytest.fixture def board_4x4(): return [ ['u','n','r','e'], ['qu','n','i','l'], ['i','s','h','a'], ['s','e','l','b'] ] @pytest.fixture def expected_words_max_4(): return [ ("u", [(0, 0)]), ("un", [(0, 0), (1, 1)]), ("unn", [(0, 0), (1, 1), (0, 1)]), ("uns", [(0, 0), (1, 1), (2, 1)]), ("uni", [(0, 0), (1, 1), (2, 0)]), ("unie", [(0, 0), (1, 1), (2, 0), (3, 1)]), ("uni", [(0, 0), (1, 1), (1, 2)]), ("unie", [(0, 0), (1, 1), (1, 2), (0, 3)]), ("un", [(0, 0), (0, 1)]), ("unn", [(0, 0), (0, 1), (1, 1)]), ("uni", [(0, 0), (0, 1), (1, 2)]), ("unie", [(0, 0), (0, 1), (1, 2), (0, 3)]), ("n", [(0, 1)]), ("ni", [(0, 1), (1, 2)]), ("nis", [(0, 1), (1, 2), (2, 1)]), ("nisi", [(0, 1), (1, 2), (2, 1), (2, 0)]), ("nil", [(0, 1), (1, 2), (1, 3)]), ("nile", [(0, 1), (1, 2), (1, 3), (0, 3)]), ("nu", [(0, 1), (0, 0)]), ("nun", [(0, 1), (0, 0), (1, 1)]), ("nuns", [(0, 1), (0, 0), (1, 1), (2, 1)]), ("nr", [(0, 1), (0, 2)]), ("r", [(0, 2)]), ("rin", [(0, 2), (1, 2), (0, 1)]), ("rie", [(0, 2), (1, 2), (0, 3)]), ("riel", [(0, 2), (1, 2), (0, 3), (1, 3)]), ("risqu", [(0, 2), (1, 2), (2, 1), (1, 0)]), ("rise", [(0, 2), (1, 2), (2, 1), (3, 1)]), ("riss", [(0, 2), (1, 2), (2, 1), (3, 0)]), ("ria", [(0, 2), (1, 2), (2, 3)]), ("rial", [(0, 2), (1, 2), (2, 3), (1, 3)]), ("rial", [(0, 2), (1, 2), (2, 3), (3, 2)]), ("rin", [(0, 2), (1, 2), (1, 1)]), ("rins", [(0, 2), (1, 2), (1, 1), (2, 1)]), ("rile", [(0, 2), (1, 2), (1, 3), (0, 3)]), ("rn", [(0, 2), (1, 1)]), ("rle", [(0, 2), (1, 3), (0, 3)]), ("rn", [(0, 2), (0, 1)]), ("re", [(0, 2), (0, 3)]), ("rel", [(0, 2), (0, 3), (1, 3)]), ("rei", [(0, 2), (0, 3), (1, 2)]), ("rein", [(0, 2), (0, 3), (1, 2), (0, 1)]), ("reis", [(0, 2), (0, 3), (1, 2), (2, 1)]), ("rein", [(0, 2), (0, 3), (1, 2), (1, 1)]), ("e", [(0, 3)]), ("el", [(0, 3), (1, 3)]), ("ela", [(0, 3), (1, 3), (2, 3)]), ("elhi", [(0, 3), (1, 3), (2, 2), (1, 2)]), ("eli", [(0, 3), (1, 3), (1, 2)]), ("elia", [(0, 3), (1, 3), (1, 2), (2, 3)]), ("eir", [(0, 3), (1, 2), (0, 2)]), ("eila", [(0, 3), (1, 2), (1, 3), (2, 3)]), ("er", [(0, 3), (0, 2)]), ("erin", [(0, 3), (0, 2), (1, 2), (0, 1)]), ("eris", [(0, 3), (0, 2), (1, 2), (2, 1)]), ("eria", [(0, 3), (0, 2), (1, 2), (2, 3)]), ("erin", [(0, 3), (0, 2), (1, 2), (1, 1)]), ("ern", [(0, 3), (0, 2), (1, 1)]), ("erns", [(0, 3), (0, 2), (1, 1), (2, 1)]), ("ern", [(0, 3), (0, 2), (0, 1)]), ("qu", [(1, 0)]), ("qui", [(1, 0), (2, 0)]), ("quin", [(1, 0), (2, 0), (1, 1)]), ("quis", [(1, 0), (2, 0), (3, 0)]), ("quis", [(1, 0), (2, 0), (2, 1)]), ("n", [(1, 1)]), ("nu", [(1, 1), (0, 0)]), ("nun", [(1, 1), (0, 0), (0, 1)]), ("nr", [(1, 1), (0, 2)]), ("ns", [(1, 1), (2, 1)]), ("ni", [(1, 1), (2, 0)]), ("nis", [(1, 1), (2, 0), (3, 0)]), ("nies", [(1, 1), (2, 0), (3, 1), (2, 1)]), ("nies", [(1, 1), (2, 0), (3, 1), (3, 0)]), ("nis", [(1, 1), (2, 0), (2, 1)]), ("nisi", [(1, 1), (2, 0), (2, 1), (1, 2)]), ("ni", [(1, 1), (1, 2)]), ("nis", [(1, 1), (1, 2), (2, 1)]), ("nisi", [(1, 1), (1, 2), (2, 1), (2, 0)]), ("nil", [(1, 1), (1, 2), (1, 3)]), ("nile", [(1, 1), (1, 2), (1, 3), (0, 3)]), ("i", [(1, 2)]), ("ir", [(1, 2), (0, 2)]), ("ire", [(1, 2), (0, 2), (0, 3)]), ("in", [(1, 2), (0, 1)]), ("inn", [(1, 2), (0, 1), (1, 1)]), ("inns", [(1, 2), (0, 1), (1, 1), (2, 1)]), ("ie", [(1, 2), (0, 3)]), ("ihs", [(1, 2), (2, 2), (2, 1)]), ("is", [(1, 2), (2, 1)]), ("isn", [(1, 2), (2, 1), (1, 1)]), ("ise", [(1, 2), (2, 1), (3, 1)]), ("isl", [(1, 2), (2, 1), (3, 2)]), ("isle", [(1, 2), (2, 1), (3, 2), (3, 1)]), ("isis", [(1, 2), (2, 1), (2, 0), (3, 0)]), ("ish", [(1, 2), (2, 1), (2, 2)]), ("ia", [(1, 2), (2, 3)]), ("in", [(1, 2), (1, 1)]), ("inn", [(1, 2), (1, 1), (0, 1)]), ("ins", [(1, 2), (1, 1), (2, 1)]), ("il", [(1, 2), (1, 3)]), ("ile", [(1, 2), (1, 3), (0, 3)]), ("ila", [(1, 2), (1, 3), (2, 3)]), ("l", [(1, 3)]), ("le", [(1, 3), (0, 3)]), ("lei", [(1, 3), (0, 3), (1, 2)]), ("leis", [(1, 3), (0, 3), (1, 2), (2, 1)]), ("ler", [(1, 3), (0, 3), (0, 2)]), ("lr", [(1, 3), (0, 2)]), ("la", [(1, 3), (2, 3)]), ("lai", [(1, 3), (2, 3), (1, 2)]), ("lair", [(1, 3), (2, 3), (1, 2), (0, 2)]), ("lain", [(1, 3), (2, 3), (1, 2), (0, 1)]), ("lain", [(1, 3), (2, 3), (1, 2), (1, 1)]), ("lab", [(1, 3), (2, 3), (3, 3)]), ("lah", [(1, 3), (2, 3), (2, 2)]), ("lh", [(1, 3), (2, 2)]), ("lhb", [(1, 3), (2, 2), (3, 3)]), ("li", [(1, 3), (1, 2)]), ("lir", [(1, 3), (1, 2), (0, 2)]), ("lire", [(1, 3), (1, 2), (0, 2), (0, 3)]), ("lin", [(1, 3), (1, 2), (0, 1)]), ("linn", [(1, 3), (1, 2), (0, 1), (1, 1)]), ("lie", [(1, 3), (1, 2), (0, 3)]), ("lier", [(1, 3), (1, 2), (0, 3), (0, 2)]), ("lis", [(1, 3), (1, 2), (2, 1)]), ("lise", [(1, 3), (1, 2), (2, 1), (3, 1)]), ("liss", [(1, 3), (1, 2), (2, 1), (3, 0)]), ("lish", [(1, 3), (1, 2), (2, 1), (2, 2)]), ("lin", [(1, 3), (1, 2), (1, 1)]), ("linn", [(1, 3), (1, 2), (1, 1), (0, 1)]), ("lins", [(1, 3), (1, 2), (1, 1), (2, 1)]), ("i", [(2, 0)]), ("in", [(2, 0), (1, 1)]), ("inn", [(2, 0), (1, 1), (0, 1)]), ("ins", [(2, 0), (1, 1), (2, 1)]), ("inia", [(2, 0), (1, 1), (1, 2), (2, 3)]), ("is", [(2, 0), (3, 0)]), ("ise", [(2, 0), (3, 0), (3, 1)]), ("ie", [(2, 0), (3, 1)]), ("is", [(2, 0), (2, 1)]), ("isn", [(2, 0), (2, 1), (1, 1)]), ("ise", [(2, 0), (2, 1), (3, 1)]), ("isl", [(2, 0), (2, 1), (3, 2)]), ("isle", [(2, 0), (2, 1), (3, 2), (3, 1)]), ("ish", [(2, 0), (2, 1), (2, 2)]), ("s", [(2, 1)]), ("sn", [(2, 1), (1, 1)]), ("si", [(2, 1), (1, 2)]), ("sir", [(2, 1), (1, 2), (0, 2)]), ("sire", [(2, 1), (1, 2), (0, 2), (0, 3)]), ("sin", [(2, 1), (1, 2), (0, 1)]), ("sie", [(2, 1), (1, 2), (0, 3)]), ("sier", [(2, 1), (1, 2), (0, 3), (0, 2)]), ("sia", [(2, 1), (1, 2), (2, 3)]), ("sial", [(2, 1), (1, 2), (2, 3), (1, 3)]), ("sial", [(2, 1), (1, 2), (2, 3), (3, 2)]), ("sin", [(2, 1), (1, 2), (1, 1)]), ("sinh", [(2, 1), (1, 2), (1, 1), (2, 2)]), ("sil", [(2, 1), (1, 2), (1, 3)]), ("sile", [(2, 1), (1, 2), (1, 3), (0, 3)]), ("se", [(2, 1), (3, 1)]), ("sei", [(2, 1), (3, 1), (2, 0)]), ("seis", [(2, 1), (3, 1), (2, 0), (3, 0)]), ("sel", [(2, 1), (3, 1), (3, 2)]), ("ss", [(2, 1), (3, 0)]), ("ssi", [(2, 1), (3, 0), (2, 0)]), ("sl", [(2, 1), (3, 2)]), ("sla", [(2, 1), (3, 2), (2, 3)]), ("slab", [(2, 1), (3, 2), (2, 3), (3, 3)]), ("si", [(2, 1), (2, 0)]), ("sin", [(2, 1), (2, 0), (1, 1)]), ("sinh", [(2, 1), (2, 0), (1, 1), (2, 2)]), ("sis", [(2, 1), (2, 0), (3, 0)]), ("sise", [(2, 1), (2, 0), (3, 0), (3, 1)]), ("sie", [(2, 1), (2, 0), (3, 1)]), ("sh", [(2, 1), (2, 2)]), ("shi", [(2, 1), (2, 2), (1, 2)]), ("shin", [(2, 1), (2, 2), (1, 2), (0, 1)]), ("shia", [(2, 1), (2, 2), (1, 2), (2, 3)]), ("shin", [(2, 1), (2, 2), (1, 2), (1, 1)]), ("she", [(2, 1), (2, 2), (3, 1)]), ("shes", [(2, 1), (2, 2), (3, 1), (3, 0)]), ("shel", [(2, 1), (2, 2), (3, 1), (3, 2)]), ("sha", [(2, 1), (2, 2), (2, 3)]), ("shai", [(2, 1), (2, 2), (2, 3), (1, 2)]), ("shab", [(2, 1), (2, 2), (2, 3), (3, 3)]), ("h", [(2, 2)]), ("hi", [(2, 2), (1, 2)]), ("hir", [(2, 2), (1, 2), (0, 2)]), ("hire", [(2, 2), (1, 2), (0, 2), (0, 3)]), ("hin", [(2, 2), (1, 2), (0, 1)]), ("hie", [(2, 2), (1, 2), (0, 3)]), ("his", [(2, 2), (1, 2), (2, 1)]), ("hisn", [(2, 2), (1, 2), (2, 1), (1, 1)]), ("hiss", [(2, 2), (1, 2), (2, 1), (3, 0)]), ("hia", [(2, 2), (1, 2), (2, 3)]), ("hin", [(2, 2), (1, 2), (1, 1)]), ("hins", [(2, 2), (1, 2), (1, 1), (2, 1)]), ("hile", [(2, 2), (1, 2), (1, 3), (0, 3)]), ("hila", [(2, 2), (1, 2), (1, 3), (2, 3)]), ("hl", [(2, 2), (1, 3)]), ("hler", [(2, 2), (1, 3), (0, 3), (0, 2)]), ("hl", [(2, 2), (3, 2)]), ("he", [(2, 2), (3, 1)]), ("hes", [(2, 2), (3, 1), (2, 1)]), ("hei", [(2, 2), (3, 1), (2, 0)]), ("hein", [(2, 2), (3, 1), (2, 0), (1, 1)]), ("hes", [(2, 2), (3, 1), (3, 0)]), ("hel", [(2, 2), (3, 1), (3, 2)]), ("hb", [(2, 2), (3, 3)]), ("hs", [(2, 2), (2, 1)]), ("hsi", [(2, 2), (2, 1), (1, 2)]), ("hsi", [(2, 2), (2, 1), (2, 0)]), ("ha", [(2, 2), (2, 3)]), ("hal", [(2, 2), (2, 3), (1, 3)]), ("hale", [(2, 2), (2, 3), (1, 3), (0, 3)]), ("hair", [(2, 2), (2, 3), (1, 2), (0, 2)]), ("hain", [(2, 2), (2, 3), (1, 2), (0, 1)]), ("hain", [(2, 2), (2, 3), (1, 2), (1, 1)]), ("hail", [(2, 2), (2, 3), (1, 2), (1, 3)]), ("hab", [(2, 2), (2, 3), (3, 3)]), ("hal", [(2, 2), (2, 3), (3, 2)]), ("hals", [(2, 2), (2, 3), (3, 2), (2, 1)]), ("hale", [(2, 2), (2, 3), (3, 2), (3, 1)]), ("a", [(2, 3)]), ("al", [(2, 3), (1, 3)]), ("ale", [(2, 3), (1, 3), (0, 3)]), ("alin", [(2, 3), (1, 3), (1, 2), (0, 1)]), ("alin", [(2, 3), (1, 3), (1, 2), (1, 1)]), ("ai", [(2, 3), (1, 2)]), ("air", [(2, 3), (1, 2), (0, 2)]), ("airn", [(2, 3), (1, 2), (0, 2), (1, 1)]), ("airn", [(2, 3), (1, 2), (0, 2), (0, 1)]), ("aire", [(2, 3), (1, 2), (0, 2), (0, 3)]), ("ain", [(2, 3), (1, 2), (0, 1)]), ("ainu", [(2, 3), (1, 2), (0, 1), (0, 0)]), ("aiel", [(2, 3), (1, 2), (0, 3), (1, 3)]), ("ais", [(2, 3), (1, 2), (2, 1)]), ("ain", [(2, 3), (1, 2), (1, 1)]), ("ainu", [(2, 3), (1, 2), (1, 1), (0, 0)]), ("ains", [(2, 3), (1, 2), (1, 1), (2, 1)]), ("ail", [(2, 3), (1, 2), (1, 3)]), ("aile", [(2, 3), (1, 2), (1, 3), (0, 3)]), ("ab", [(2, 3), (3, 3)]), ("abl", [(2, 3), (3, 3), (3, 2)]), ("able", [(2, 3), (3, 3), (3, 2), (3, 1)]), ("al", [(2, 3), (3, 2)]), ("als", [(2, 3), (3, 2), (2, 1)]), ("ale", [(2, 3), (3, 2), (3, 1)]), ("ales", [(2, 3), (3, 2), (3, 1), (2, 1)]), ("ales", [(2, 3), (3, 2), (3, 1), (3, 0)]), ("alb", [(2, 3), (3, 2), (3, 3)]), ("ah", [(2, 3), (2, 2)]), ("ahi", [(2, 3), (2, 2), (1, 2)]), ("ahir", [(2, 3), (2, 2), (1, 2), (0, 2)]), ("ahs", [(2, 3), (2, 2), (2, 1)]), ("s", [(3, 0)]), ("si", [(3, 0), (2, 0)]), ("sin", [(3, 0), (2, 0), (1, 1)]), ("sins", [(3, 0), (2, 0), (1, 1), (2, 1)]), ("sinh", [(3, 0), (2, 0), (1, 1), (2, 2)]), ("sie", [(3, 0), (2, 0), (3, 1)]), ("sis", [(3, 0), (2, 0), (2, 1)]), ("sisi", [(3, 0), (2, 0), (2, 1), (1, 2)]), ("sise", [(3, 0), (2, 0), (2, 1), (3, 1)]), ("sish", [(3, 0), (2, 0), (2, 1), (2, 2)]), ("ss", [(3, 0), (2, 1)]), ("ssi", [(3, 0), (2, 1), (1, 2)]), ("ssi", [(3, 0), (2, 1), (2, 0)]), ("se", [(3, 0), (3, 1)]), ("sei", [(3, 0), (3, 1), (2, 0)]), ("seis", [(3, 0), (3, 1), (2, 0), (2, 1)]), ("sel", [(3, 0), (3, 1), (3, 2)]), ("sels", [(3, 0), (3, 1), (3, 2), (2, 1)]), ("e", [(3, 1)]), ("es", [(3, 1), (2, 1)]), ("ess", [(3, 1), (2, 1), (3, 0)]), ("eh", [(3, 1), (2, 2)]), ("es", [(3, 1), (3, 0)]), ("ess", [(3, 1), (3, 0), (2, 1)]), ("el", [(3, 1), (3, 2)]), ("elhi", [(3, 1), (3, 2), (2, 2), (1, 2)]), ("els", [(3, 1), (3, 2), (2, 1)]), ("ela", [(3, 1), (3, 2), (2, 3)]), ("elb", [(3, 1), (3, 2), (3, 3)]), ("l", [(3, 2)]), ("lh", [(3, 2), (2, 2)]), ("lhb", [(3, 2), (2, 2), (3, 3)]), ("ls", [(3, 2), (2, 1)]), ("la", [(3, 2), (2, 3)]), ("lai", [(3, 2), (2, 3), (1, 2)]), ("lair", [(3, 2), (2, 3), (1, 2), (0, 2)]), ("lain", [(3, 2), (2, 3), (1, 2), (0, 1)]), ("lain", [(3, 2), (2, 3), (1, 2), (1, 1)]), ("lab", [(3, 2), (2, 3), (3, 3)]), ("lah", [(3, 2), (2, 3), (2, 2)]), ("le", [(3, 2), (3, 1)]), ("les", [(3, 2), (3, 1), (2, 1)]), ("less", [(3, 2), (3, 1), (2, 1), (3, 0)]), ("lei", [(3, 2), (3, 1), (2, 0)]), ("leis", [(3, 2), (3, 1), (2, 0), (3, 0)]), ("leis", [(3, 2), (3, 1), (2, 0), (2, 1)]), ("lehi", [(3, 2), (3, 1), (2, 2), (1, 2)]), ("les", [(3, 2), (3, 1), (3, 0)]), ("less", [(3, 2), (3, 1), (3, 0), (2, 1)]), ("lb", [(3, 2), (3, 3)]), ("b", [(3, 3)]), ("ba", [(3, 3), (2, 3)]), ("bal", [(3, 3), (2, 3), (1, 3)]), ("bale", [(3, 3), (2, 3), (1, 3), (0, 3)]), ("balr", [(3, 3), (2, 3), (1, 3), (0, 2)]), ("bali", [(3, 3), (2, 3), (1, 3), (1, 2)]), ("bai", [(3, 3), (2, 3), (1, 2)]), ("bain", [(3, 3), (2, 3), (1, 2), (0, 1)]), ("bais", [(3, 3), (2, 3), (1, 2), (2, 1)]), ("bain", [(3, 3), (2, 3), (1, 2), (1, 1)]), ("bail", [(3, 3), (2, 3), (1, 2), (1, 3)]), ("bal", [(3, 3), (2, 3), (3, 2)]), ("bals", [(3, 3), (2, 3), (3, 2), (2, 1)]), ("bale", [(3, 3), (2, 3), (3, 2), (3, 1)]), ("bah", [(3, 3), (2, 3), (2, 2)]), ("bhil", [(3, 3), (2, 2), (1, 2), (1, 3)]), ("bl", [(3, 3), (3, 2)]), ("bls", [(3, 3), (3, 2), (2, 1)]), ("blah", [(3, 3), (3, 2), (2, 3), (2, 2)]), ] @pytest.fixture def expected_words_max_20(): return [ ("u", [(0, 0)]), ("un", [(0, 0), (1, 1)]), ("unn", [(0, 0), (1, 1), (0, 1)]), ("unrelinquishable", [(0, 0), (1, 1), (0, 2), (0, 3), (1, 3), (1, 2), (0, 1), (1, 0), (2, 0), (2, 1), (2, 2), (2, 3), (3, 3), (3, 2), (3, 1)]), ("unrelishable", [(0, 0), (1, 1), (0, 2), (0, 3), (1, 3), (1, 2), (2, 1), (2, 2), (2, 3), (3, 3), (3, 2), (3, 1)]), ("unreliable", [(0, 0), (1, 1), (0, 2), (0, 3), (1, 3), (1, 2), (2, 3), (3, 3), (3, 2), (3, 1)]), ("unrein", [(0, 0), (1, 1), (0, 2), (0, 3), (1, 2), (0, 1)]), ("uns", [(0, 0), (1, 1), (2, 1)]), ("unsin", [(0, 0), (1, 1), (2, 1), (1, 2), (0, 1)]), ("unslain", [(0, 0), (1, 1), (2, 1), (3, 2), (2, 3), (1, 2), (0, 1)]), ("unshale", [(0, 0), (1, 1), (2, 1), (2, 2), (2, 3), (1, 3), (0, 3)]), ("unshale", [(0, 0), (1, 1), (2, 1), (2, 2), (2, 3), (3, 2), (3, 1)]), ("uni", [(0, 0), (1, 1), (2, 0)]), ("unie", [(0, 0), (1, 1), (2, 0), (3, 1)]), ("unhale", [(0, 0), (1, 1), (2, 2), (2, 3), (1, 3), (0, 3)]), ("unhair", [(0, 0), (1, 1), (2, 2), (2, 3), (1, 2), (0, 2)]), ("unhale", [(0, 0), (1, 1), (2, 2), (2, 3), (3, 2), (3, 1)]), ("uni", [(0, 0), (1, 1), (1, 2)]), ("unie", [(0, 0), (1, 1), (1, 2), (0, 3)]), ("un", [(0, 0), (0, 1)]), ("unn", [(0, 0), (0, 1), (1, 1)]), ("uni", [(0, 0), (0, 1), (1, 2)]), ("unie", [(0, 0), (0, 1), (1, 2), (0, 3)]), ("unrelishable", [(0, 0), (0, 1), (0, 2), (0, 3), (1, 3), (1, 2), (2, 1), (2, 2), (2, 3), (3, 3), (3, 2), (3, 1)]), ("unreliable", [(0, 0), (0, 1), (0, 2), (0, 3), (1, 3), (1, 2), (2, 3), (3, 3), (3, 2), (3, 1)]), ("unrelinquishable", [(0, 0), (0, 1), (0, 2), (0, 3), (1, 3), (1, 2), (1, 1), (1, 0), (2, 0), (2, 1), (2, 2), (2, 3), (3, 3), (3, 2), (3, 1)]), ("unrein", [(0, 0), (0, 1), (0, 2), (0, 3), (1, 2), (1, 1)]), ("n", [(0, 1)]), ("ni", [(0, 1), (1, 2)]), ("nihal", [(0, 1), (1, 2), (2, 2), (2, 3), (1, 3)]), ("nihal", [(0, 1), (1, 2), (2, 2), (2, 3), (3, 2)]), ("nis", [(0, 1), (1, 2), (2, 1)]), ("nisei", [(0, 1), (1, 2), (2, 1), (3, 1), (2, 0)]), ("niseis", [(0, 1), (1, 2), (2, 1), (3, 1), (2, 0), (3, 0)]), ("nisse", [(0, 1), (1, 2), (2, 1), (3, 0), (3, 1)]), ("nisi", [(0, 1), (1, 2), (2, 1), (2, 0)]), ("nil", [(0, 1), (1, 2), (1, 3)]), ("nile", [(0, 1), (1, 2), (1, 3), (0, 3)]), ("nu", [(0, 1), (0, 0)]), ("nun", [(0, 1), (0, 0), (1, 1)]), ("nuns", [(0, 1), (0, 0), (1, 1), (2, 1)]), ("nr", [(0, 1), (0, 2)]), ("r", [(0, 2)]), ("rin", [(0, 2), (1, 2), (0, 1)]), ("rie", [(0, 2), (1, 2), (0, 3)]), ("riel", [(0, 2), (1, 2), (0, 3), (1, 3)]), ("risqu", [(0, 2), (1, 2), (2, 1), (1, 0)]), ("rise", [(0, 2), (1, 2), (2, 1), (3, 1)]), ("rises", [(0, 2), (1, 2), (2, 1), (3, 1), (3, 0)]), ("riss", [(0, 2), (1, 2), (2, 1), (3, 0)]), ("rissel", [(0, 2), (1, 2), (2, 1), (3, 0), (3, 1), (3, 2)]), ("ria", [(0, 2), (1, 2), (2, 3)]), ("rial", [(0, 2), (1, 2), (2, 3), (1, 3)]), ("rial", [(0, 2), (1, 2), (2, 3), (3, 2)]), ("rials", [(0, 2), (1, 2), (2, 3), (3, 2), (2, 1)]), ("rin", [(0, 2), (1, 2), (1, 1)]), ("rins", [(0, 2), (1, 2), (1, 1), (2, 1)]), ("rinse", [(0, 2), (1, 2), (1, 1), (2, 1), (3, 1)]), ("rinses", [(0, 2), (1, 2), (1, 1), (2, 1), (3, 1), (3, 0)]), ("rile", [(0, 2), (1, 2), (1, 3), (0, 3)]), ("rn", [(0, 2), (1, 1)]), ("rle", [(0, 2), (1, 3), (0, 3)]), ("rn", [(0, 2), (0, 1)]), ("re", [(0, 2), (0, 3)]), ("rel", [(0, 2), (0, 3), (1, 3)]), ("relais", [(0, 2), (0, 3), (1, 3), (2, 3), (1, 2), (2, 1)]), ("relinquish", [(0, 2), (0, 3), (1, 3), (1, 2), (0, 1), (1, 0), (2, 0), (2, 1), (2, 2)]), ("relinquishes", [(0, 2), (0, 3), (1, 3), (1, 2), (0, 1), (1, 0), (2, 0), (2, 1), (2, 2), (3, 1), (3, 0)]), ("relish", [(0, 2), (0, 3), (1, 3), (1, 2), (2, 1), (2, 2)]), ("relishes", [(0, 2), (0, 3), (1, 3), (1, 2), (2, 1), (2, 2), (3, 1), (3, 0)]), ("relishable", [(0, 2), (0, 3), (1, 3), (1, 2), (2, 1), (2, 2), (2, 3), (3, 3), (3, 2), (3, 1)]), ("reliable", [(0, 2), (0, 3), (1, 3), (1, 2), (2, 3), (3, 3), (3, 2), (3, 1)]), ("relinquish", [(0, 2), (0, 3), (1, 3), (1, 2), (1, 1), (1, 0), (2, 0), (2, 1), (2, 2)]), ("relinquishes", [(0, 2), (0, 3), (1, 3), (1, 2), (1, 1), (1, 0), (2, 0), (2, 1), (2, 2), (3, 1), (3, 0)]), ("rei", [(0, 2), (0, 3), (1, 2)]), ("rein", [(0, 2), (0, 3), (1, 2), (0, 1)]), ("reis", [(0, 2), (0, 3), (1, 2), (2, 1)]), ("rein", [(0, 2), (0, 3), (1, 2), (1, 1)]), ("reins", [(0, 2), (0, 3), (1, 2), (1, 1), (2, 1)]), ("e", [(0, 3)]), ("el", [(0, 3), (1, 3)]), ("ela", [(0, 3), (1, 3), (2, 3)]), ("elain", [(0, 3), (1, 3), (2, 3), (1, 2), (0, 1)]), ("elain", [(0, 3), (1, 3), (2, 3), (1, 2), (1, 1)]), ("elains", [(0, 3), (1, 3), (2, 3), (1, 2), (1, 1), (2, 1)]), ("elhi", [(0, 3), (1, 3), (2, 2), (1, 2)]), ("eli", [(0, 3), (1, 3), (1, 2)]), ("elisha", [(0, 3), (1, 3), (1, 2), (2, 1), (2, 2), (2, 3)]), ("elia", [(0, 3), (1, 3), (1, 2), (2, 3)]), ("eir", [(0, 3), (1, 2), (0, 2)]), ("eila", [(0, 3), (1, 2), (1, 3), (2, 3)]), ("er", [(0, 3), (0, 2)]), ("erin", [(0, 3), (0, 2), (1, 2), (0, 1)]), ("eris", [(0, 3), (0, 2), (1, 2), (2, 1)]), ("eria", [(0, 3), (0, 2), (1, 2), (2, 3)]), ("erin", [(0, 3), (0, 2), (1, 2), (1, 1)]), ("ern", [(0, 3), (0, 2), (1, 1)]), ("erns", [(0, 3), (0, 2), (1, 1), (2, 1)]), ("ernie", [(0, 3), (0, 2), (1, 1), (2, 0), (3, 1)]), ("ern", [(0, 3), (0, 2), (0, 1)]), ("qu", [(1, 0)]), ("qui", [(1, 0), (2, 0)]), ("quin", [(1, 0), (2, 0), (1, 1)]), ("quins", [(1, 0), (2, 0), (1, 1), (2, 1)]), ("quinse", [(1, 0), (2, 0), (1, 1), (2, 1), (3, 1)]), ("quinin", [(1, 0), (2, 0), (1, 1), (1, 2), (0, 1)]), ("quiniela", [(1, 0), (2, 0), (1, 1), (1, 2), (0, 3), (1, 3), (2, 3)]), ("quinia", [(1, 0), (2, 0), (1, 1), (1, 2), (2, 3)]), ("quis", [(1, 0), (2, 0), (3, 0)]), ("quis", [(1, 0), (2, 0), (2, 1)]), ("quisle", [(1, 0), (2, 0), (2, 1), (3, 2), (3, 1)]), ("n", [(1, 1)]), ("nu", [(1, 1), (0, 0)]), ("nun", [(1, 1), (0, 0), (0, 1)]), ("nr", [(1, 1), (0, 2)]), ("ns", [(1, 1), (2, 1)]), ("ni", [(1, 1), (2, 0)]), ("nis", [(1, 1), (2, 0), (3, 0)]), ("nisse", [(1, 1), (2, 0), (3, 0), (2, 1), (3, 1)]), ("nies", [(1, 1), (2, 0), (3, 1), (2, 1)]), ("nies", [(1, 1), (2, 0), (3, 1), (3, 0)]), ("niels", [(1, 1), (2, 0), (3, 1), (3, 2), (2, 1)]), ("nis", [(1, 1), (2, 0), (2, 1)]), ("nisi", [(1, 1), (2, 0), (2, 1), (1, 2)]), ("nisse", [(1, 1), (2, 0), (2, 1), (3, 0), (3, 1)]), ("ni", [(1, 1), (1, 2)]), ("nihal", [(1, 1), (1, 2), (2, 2), (2, 3), (1, 3)]), ("nihal", [(1, 1), (1, 2), (2, 2), (2, 3), (3, 2)]), ("nis", [(1, 1), (1, 2), (2, 1)]), ("nisei", [(1, 1), (1, 2), (2, 1), (3, 1), (2, 0)]), ("niseis", [(1, 1), (1, 2), (2, 1), (3, 1), (2, 0), (3, 0)]), ("nisse", [(1, 1), (1, 2), (2, 1), (3, 0), (3, 1)]), ("nisi", [(1, 1), (1, 2), (2, 1), (2, 0)]), ("nil", [(1, 1), (1, 2), (1, 3)]), ("nile", [(1, 1), (1, 2), (1, 3), (0, 3)]), ("i", [(1, 2)]), ("ir", [(1, 2), (0, 2)]), ("ire", [(1, 2), (0, 2), (0, 3)]), ("in", [(1, 2), (0, 1)]), ("inn", [(1, 2), (0, 1), (1, 1)]), ("inns", [(1, 2), (0, 1), (1, 1), (2, 1)]), ("ie", [(1, 2), (0, 3)]), ("ihs", [(1, 2), (2, 2), (2, 1)]), ("is", [(1, 2), (2, 1)]), ("isn", [(1, 2), (2, 1), (1, 1)]), ("ise", [(1, 2), (2, 1), (3, 1)]), ("issei", [(1, 2), (2, 1), (3, 0), (3, 1), (2, 0)]), ("isl", [(1, 2), (2, 1), (3, 2)]), ("isle", [(1, 2), (2, 1), (3, 2), (3, 1)]), ("isles", [(1, 2), (2, 1), (3, 2), (3, 1), (3, 0)]), ("isis", [(1, 2), (2, 1), (2, 0), (3, 0)]), ("ish", [(1, 2), (2, 1), (2, 2)]), ("ia", [(1, 2), (2, 3)]), ("in", [(1, 2), (1, 1)]), ("inn", [(1, 2), (1, 1), (0, 1)]), ("ins", [(1, 2), (1, 1), (2, 1)]), ("inisle", [(1, 2), (1, 1), (2, 0), (2, 1), (3, 2), (3, 1)]), ("inhale", [(1, 2), (1, 1), (2, 2), (2, 3), (1, 3), (0, 3)]), ("inhaler", [(1, 2), (1, 1), (2, 2), (2, 3), (1, 3), (0, 3), (0, 2)]), ("inhale", [(1, 2), (1, 1), (2, 2), (2, 3), (3, 2), (3, 1)]), ("inhales", [(1, 2), (1, 1), (2, 2), (2, 3), (3, 2), (3, 1), (2, 1)]), ("inhales", [(1, 2), (1, 1), (2, 2), (2, 3), (3, 2), (3, 1), (3, 0)]), ("il", [(1, 2), (1, 3)]), ("ile", [(1, 2), (1, 3), (0, 3)]), ("ila", [(1, 2), (1, 3), (2, 3)]), ("l", [(1, 3)]), ("le", [(1, 3), (0, 3)]), ("lei", [(1, 3), (0, 3), (1, 2)]), ("leis", [(1, 3), (0, 3), (1, 2), (2, 1)]), ("leiss", [(1, 3), (0, 3), (1, 2), (2, 1), (3, 0)]), ("ler", [(1, 3), (0, 3), (0, 2)]), ("lr", [(1, 3), (0, 2)]), ("la", [(1, 3), (2, 3)]), ("lai", [(1, 3), (2, 3), (1, 2)]), ("lair", [(1, 3), (2, 3), (1, 2), (0, 2)]), ("lain", [(1, 3), (2, 3), (1, 2), (0, 1)]), ("laisse", [(1, 3), (2, 3), (1, 2), (2, 1), (3, 0), (3, 1)]), ("lain", [(1, 3), (2, 3), (1, 2), (1, 1)]), ("lab", [(1, 3), (2, 3), (3, 3)]), ("lah", [(1, 3), (2, 3), (2, 2)]), ("lh", [(1, 3), (2, 2)]), ("lhb", [(1, 3), (2, 2), (3, 3)]), ("li", [(1, 3), (1, 2)]), ("lir", [(1, 3), (1, 2), (0, 2)]), ("lire", [(1, 3), (1, 2), (0, 2), (0, 3)]), ("lin", [(1, 3), (1, 2), (0, 1)]), ("linn", [(1, 3), (1, 2), (0, 1), (1, 1)]), ("linns", [(1, 3), (1, 2), (0, 1), (1, 1), (2, 1)]), ("linquish", [(1, 3), (1, 2), (0, 1), (1, 0), (2, 0), (2, 1), (2, 2)]), ("lie", [(1, 3), (1, 2), (0, 3)]), ("lier", [(1, 3), (1, 2), (0, 3), (0, 2)]), ("lis", [(1, 3), (1, 2), (2, 1)]), ("lise", [(1, 3), (1, 2), (2, 1), (3, 1)]), ("liss", [(1, 3), (1, 2), (2, 1), (3, 0)]), ("lisle", [(1, 3), (1, 2), (2, 1), (3, 2), (3, 1)]), ("lisles", [(1, 3), (1, 2), (2, 1), (3, 2), (3, 1), (3, 0)]), ("lish", [(1, 3), (1, 2), (2, 1), (2, 2)]), ("liable", [(1, 3), (1, 2), (2, 3), (3, 3), (3, 2), (3, 1)]), ("lin", [(1, 3), (1, 2), (1, 1)]), ("linn", [(1, 3), (1, 2), (1, 1), (0, 1)]), ("lins", [(1, 3), (1, 2), (1, 1), (2, 1)]), ("linie", [(1, 3), (1, 2), (1, 1), (2, 0), (3, 1)]), ("linha", [(1, 3), (1, 2), (1, 1), (2, 2), (2, 3)]), ("linquish", [(1, 3), (1, 2), (1, 1), (1, 0), (2, 0), (2, 1), (2, 2)]), ("i", [(2, 0)]), ("in", [(2, 0), (1, 1)]), ("inn", [(2, 0), (1, 1), (0, 1)]), ("ins", [(2, 0), (1, 1), (2, 1)]), ("inhale", [(2, 0), (1, 1), (2, 2), (2, 3), (1, 3), (0, 3)]), ("inhaler", [(2, 0), (1, 1), (2, 2), (2, 3), (1, 3), (0, 3), (0, 2)]), ("inhale", [(2, 0), (1, 1), (2, 2), (2, 3), (3, 2), (3, 1)]), ("inhales", [(2, 0), (1, 1), (2, 2), (2, 3), (3, 2), (3, 1), (2, 1)]), ("inhales", [(2, 0), (1, 1), (2, 2), (2, 3), (3, 2), (3, 1), (3, 0)]), ("inisle", [(2, 0), (1, 1), (1, 2), (2, 1), (3, 2), (3, 1)]), ("inia", [(2, 0), (1, 1), (1, 2), (2, 3)]), ("inial", [(2, 0), (1, 1), (1, 2), (2, 3), (1, 3)]), ("inial", [(2, 0), (1, 1), (1, 2), (2, 3), (3, 2)]), ("is", [(2, 0), (3, 0)]), ("ise", [(2, 0), (3, 0), (3, 1)]), ("ie", [(2, 0), (3, 1)]), ("is", [(2, 0), (2, 1)]), ("isn", [(2, 0), (2, 1), (1, 1)]), ("ise", [(2, 0), (2, 1), (3, 1)]), ("isl", [(2, 0), (2, 1), (3, 2)]), ("isle", [(2, 0), (2, 1), (3, 2), (3, 1)]), ("isles", [(2, 0), (2, 1), (3, 2), (3, 1), (3, 0)]), ("ish", [(2, 0), (2, 1), (2, 2)]), ("s", [(2, 1)]), ("sn", [(2, 1), (1, 1)]), ("snies", [(2, 1), (1, 1), (2, 0), (3, 1), (3, 0)]), ("snirl", [(2, 1), (1, 1), (1, 2), (0, 2), (1, 3)]), ("squin", [(2, 1), (1, 0), (2, 0), (1, 1)]), ("squinnier", [(2, 1), (1, 0), (2, 0), (1, 1), (0, 1), (1, 2), (0, 3), (0, 2)]), ("si", [(2, 1), (1, 2)]), ("sir", [(2, 1), (1, 2), (0, 2)]), ("sire", [(2, 1), (1, 2), (0, 2), (0, 3)]), ("sin", [(2, 1), (1, 2), (0, 1)]), ("sie", [(2, 1), (1, 2), (0, 3)]), ("sier", [(2, 1), (1, 2), (0, 3), (0, 2)]), ("sia", [(2, 1), (1, 2), (2, 3)]), ("sial", [(2, 1), (1, 2), (2, 3), (1, 3)]), ("sial", [(2, 1), (1, 2), (2, 3), (3, 2)]), ("sin", [(2, 1), (1, 2), (1, 1)]), ("sinh", [(2, 1), (1, 2), (1, 1), (2, 2)]), ("sil", [(2, 1), (1, 2), (1, 3)]), ("sile", [(2, 1), (1, 2), (1, 3), (0, 3)]), ("se", [(2, 1), (3, 1)]), ("sei", [(2, 1), (3, 1), (2, 0)]), ("seis", [(2, 1), (3, 1), (2, 0), (3, 0)]), ("sel", [(2, 1), (3, 1), (3, 2)]), ("selah", [(2, 1), (3, 1), (3, 2), (2, 3), (2, 2)]), ("ss", [(2, 1), (3, 0)]), ("ssi", [(2, 1), (3, 0), (2, 0)]), ("sl", [(2, 1), (3, 2)]), ("sla", [(2, 1), (3, 2), (2, 3)]), ("slain", [(2, 1), (3, 2), (2, 3), (1, 2), (0, 1)]), ("slain", [(2, 1), (3, 2), (2, 3), (1, 2), (1, 1)]), ("slab", [(2, 1), (3, 2), (2, 3), (3, 3)]), ("si", [(2, 1), (2, 0)]), ("sin", [(2, 1), (2, 0), (1, 1)]), ("sinh", [(2, 1), (2, 0), (1, 1), (2, 2)]), ("sis", [(2, 1), (2, 0), (3, 0)]), ("sise", [(2, 1), (2, 0), (3, 0), (3, 1)]), ("sisel", [(2, 1), (2, 0), (3, 0), (3, 1), (3, 2)]), ("sie", [(2, 1), (2, 0), (3, 1)]), ("sh", [(2, 1), (2, 2)]), ("shi", [(2, 1), (2, 2), (1, 2)]), ("shirl", [(2, 1), (2, 2), (1, 2), (0, 2), (1, 3)]), ("shire", [(2, 1), (2, 2), (1, 2), (0, 2), (0, 3)]), ("shin", [(2, 1), (2, 2), (1, 2), (0, 1)]), ("shinnies", [(2, 1), (2, 2), (1, 2), (0, 1), (1, 1), (2, 0), (3, 1), (3, 0)]), ("shiel", [(2, 1), (2, 2), (1, 2), (0, 3), (1, 3)]), ("shier", [(2, 1), (2, 2), (1, 2), (0, 3), (0, 2)]), ("shia", [(2, 1), (2, 2), (1, 2), (2, 3)]), ("shin", [(2, 1), (2, 2), (1, 2), (1, 1)]), ("she", [(2, 1), (2, 2), (3, 1)]), ("shes", [(2, 1), (2, 2), (3, 1), (3, 0)]), ("shel", [(2, 1), (2, 2), (3, 1), (3, 2)]), ("shela", [(2, 1), (2, 2), (3, 1), (3, 2), (2, 3)]), ("sha", [(2, 1), (2, 2), (2, 3)]), ("shale", [(2, 1), (2, 2), (2, 3), (1, 3), (0, 3)]), ("shalier", [(2, 1), (2, 2), (2, 3), (1, 3), (1, 2), (0, 3), (0, 2)]), ("shai", [(2, 1), (2, 2), (2, 3), (1, 2)]), ("shairn", [(2, 1), (2, 2), (2, 3), (1, 2), (0, 2), (1, 1)]), ("shairn", [(2, 1), (2, 2), (2, 3), (1, 2), (0, 2), (0, 1)]), ("shab", [(2, 1), (2, 2), (2, 3), (3, 3)]), ("shale", [(2, 1), (2, 2), (2, 3), (3, 2), (3, 1)]), ("shales", [(2, 1), (2, 2), (2, 3), (3, 2), (3, 1), (3, 0)]), ("h", [(2, 2)]), ("hi", [(2, 2), (1, 2)]), ("hir", [(2, 2), (1, 2), (0, 2)]), ("hire", [(2, 2), (1, 2), (0, 2), (0, 3)]), ("hin", [(2, 2), (1, 2), (0, 1)]), ("hinnies", [(2, 2), (1, 2), (0, 1), (1, 1), (2, 0), (3, 1), (2, 1)]), ("hinnies", [(2, 2), (1, 2), (0, 1), (1, 1), (2, 0), (3, 1), (3, 0)]), ("hie", [(2, 2), (1, 2), (0, 3)]), ("his", [(2, 2), (1, 2), (2, 1)]), ("hisn", [(2, 2), (1, 2), (2, 1), (1, 1)]), ("hiss", [(2, 2), (1, 2), (2, 1), (3, 0)]), ("hissel", [(2, 2), (1, 2), (2, 1), (3, 0), (3, 1), (3, 2)]), ("hisis", [(2, 2), (1, 2), (2, 1), (2, 0), (3, 0)]), ("hia", [(2, 2), (1, 2), (2, 3)]), ("hin", [(2, 2), (1, 2), (1, 1)]), ("hins", [(2, 2), (1, 2), (1, 1), (2, 1)]), ("hile", [(2, 2), (1, 2), (1, 3), (0, 3)]), ("hila", [(2, 2), (1, 2), (1, 3), (2, 3)]), ("hl", [(2, 2), (1, 3)]), ("hler", [(2, 2), (1, 3), (0, 3), (0, 2)]), ("hl", [(2, 2), (3, 2)]), ("he", [(2, 2), (3, 1)]), ("hes", [(2, 2), (3, 1), (2, 1)]), ("hei", [(2, 2), (3, 1), (2, 0)]), ("hein", [(2, 2), (3, 1), (2, 0), (1, 1)]), ("heinie", [(2, 2), (3, 1), (2, 0), (1, 1), (1, 2), (0, 3)]), ("hes", [(2, 2), (3, 1), (3, 0)]), ("hel", [(2, 2), (3, 1), (3, 2)]), ("hb", [(2, 2), (3, 3)]), ("hs", [(2, 2), (2, 1)]), ("hsi", [(2, 2), (2, 1), (1, 2)]), ("hsi", [(2, 2), (2, 1), (2, 0)]), ("ha", [(2, 2), (2, 3)]), ("hal", [(2, 2), (2, 3), (1, 3)]), ("hale", [(2, 2), (2, 3), (1, 3), (0, 3)]), ("haler", [(2, 2), (2, 3), (1, 3), (0, 3), (0, 2)]), ("hair", [(2, 2), (2, 3), (1, 2), (0, 2)]), ("haire", [(2, 2), (2, 3), (1, 2), (0, 2), (0, 3)]), ("hain", [(2, 2), (2, 3), (1, 2), (0, 1)]), ("hain", [(2, 2), (2, 3), (1, 2), (1, 1)]), ("hail", [(2, 2), (2, 3), (1, 2), (1, 3)]), ("hailer", [(2, 2), (2, 3), (1, 2), (1, 3), (0, 3), (0, 2)]), ("hab", [(2, 2), (2, 3), (3, 3)]), ("hable", [(2, 2), (2, 3), (3, 3), (3, 2), (3, 1)]), ("hal", [(2, 2), (2, 3), (3, 2)]), ("hals", [(2, 2), (2, 3), (3, 2), (2, 1)]), ("halse", [(2, 2), (2, 3), (3, 2), (2, 1), (3, 1)]), ("hale", [(2, 2), (2, 3), (3, 2), (3, 1)]), ("hales", [(2, 2), (2, 3), (3, 2), (3, 1), (2, 1)]), ("hales", [(2, 2), (2, 3), (3, 2), (3, 1), (3, 0)]), ("a", [(2, 3)]), ("al", [(2, 3), (1, 3)]), ("ale", [(2, 3), (1, 3), (0, 3)]), ("alin", [(2, 3), (1, 3), (1, 2), (0, 1)]), ("alish", [(2, 3), (1, 3), (1, 2), (2, 1), (2, 2)]), ("alin", [(2, 3), (1, 3), (1, 2), (1, 1)]), ("ai", [(2, 3), (1, 2)]), ("air", [(2, 3), (1, 2), (0, 2)]), ("airn", [(2, 3), (1, 2), (0, 2), (1, 1)]), ("airns", [(2, 3), (1, 2), (0, 2), (1, 1), (2, 1)]), ("airn", [(2, 3), (1, 2), (0, 2), (0, 1)]), ("aire", [(2, 3), (1, 2), (0, 2), (0, 3)]), ("ain", [(2, 3), (1, 2), (0, 1)]), ("ainu", [(2, 3), (1, 2), (0, 1), (0, 0)]), ("aiel", [(2, 3), (1, 2), (0, 3), (1, 3)]), ("ais", [(2, 3), (1, 2), (2, 1)]), ("aisle", [(2, 3), (1, 2), (2, 1), (3, 2), (3, 1)]), ("aisles", [(2, 3), (1, 2), (2, 1), (3, 2), (3, 1), (3, 0)]), ("ain", [(2, 3), (1, 2), (1, 1)]), ("ainu", [(2, 3), (1, 2), (1, 1), (0, 0)]), ("ains", [(2, 3), (1, 2), (1, 1), (2, 1)]), ("ail", [(2, 3), (1, 2), (1, 3)]), ("aile", [(2, 3), (1, 2), (1, 3), (0, 3)]), ("ab", [(2, 3), (3, 3)]), ("abl", [(2, 3), (3, 3), (3, 2)]), ("able", [(2, 3), (3, 3), (3, 2), (3, 1)]), ("ables", [(2, 3), (3, 3), (3, 2), (3, 1), (2, 1)]), ("ables", [(2, 3), (3, 3), (3, 2), (3, 1), (3, 0)]), ("al", [(2, 3), (3, 2)]), ("als", [(2, 3), (3, 2), (2, 1)]), ("ale", [(2, 3), (3, 2), (3, 1)]), ("ales", [(2, 3), (3, 2), (3, 1), (2, 1)]), ("ales", [(2, 3), (3, 2), (3, 1), (3, 0)]), ("alb", [(2, 3), (3, 2), (3, 3)]), ("ah", [(2, 3), (2, 2)]), ("ahi", [(2, 3), (2, 2), (1, 2)]), ("ahir", [(2, 3), (2, 2), (1, 2), (0, 2)]), ("ahs", [(2, 3), (2, 2), (2, 1)]), ("s", [(3, 0)]), ("si", [(3, 0), (2, 0)]), ("sin", [(3, 0), (2, 0), (1, 1)]), ("sins", [(3, 0), (2, 0), (1, 1), (2, 1)]), ("sinh", [(3, 0), (2, 0), (1, 1), (2, 2)]), ("sinhs", [(3, 0), (2, 0), (1, 1), (2, 2), (2, 1)]), ("sie", [(3, 0), (2, 0), (3, 1)]), ("sis", [(3, 0), (2, 0), (2, 1)]), ("sisi", [(3, 0), (2, 0), (2, 1), (1, 2)]), ("sise", [(3, 0), (2, 0), (2, 1), (3, 1)]), ("sisel", [(3, 0), (2, 0), (2, 1), (3, 1), (3, 2)]), ("sish", [(3, 0), (2, 0), (2, 1), (2, 2)]), ("ss", [(3, 0), (2, 1)]), ("ssi", [(3, 0), (2, 1), (1, 2)]), ("ssi", [(3, 0), (2, 1), (2, 0)]), ("se", [(3, 0), (3, 1)]), ("sesqui", [(3, 0), (3, 1), (2, 1), (1, 0), (2, 0)]), ("sesia", [(3, 0), (3, 1), (2, 1), (1, 2), (2, 3)]), ("sei", [(3, 0), (3, 1), (2, 0)]), ("seis", [(3, 0), (3, 1), (2, 0), (2, 1)]), ("seisin", [(3, 0), (3, 1), (2, 0), (2, 1), (1, 2), (0, 1)]), ("seisin", [(3, 0), (3, 1), (2, 0), (2, 1), (1, 2), (1, 1)]), ("sel", [(3, 0), (3, 1), (3, 2)]), ("sels", [(3, 0), (3, 1), (3, 2), (2, 1)]), ("selah", [(3, 0), (3, 1), (3, 2), (2, 3), (2, 2)]), ("selahs", [(3, 0), (3, 1), (3, 2), (2, 3), (2, 2), (2, 1)]), ("e", [(3, 1)]), ("es", [(3, 1), (2, 1)]), ("ess", [(3, 1), (2, 1), (3, 0)]), ("eshin", [(3, 1), (2, 1), (2, 2), (1, 2), (0, 1)]), ("eshin", [(3, 1), (2, 1), (2, 2), (1, 2), (1, 1)]), ("eh", [(3, 1), (2, 2)]), ("es", [(3, 1), (3, 0)]), ("ess", [(3, 1), (3, 0), (2, 1)]), ("essie", [(3, 1), (3, 0), (2, 1), (1, 2), (0, 3)]), ("el", [(3, 1), (3, 2)]), ("elhi", [(3, 1), (3, 2), (2, 2), (1, 2)]), ("els", [(3, 1), (3, 2), (2, 1)]), ("elsin", [(3, 1), (3, 2), (2, 1), (1, 2), (0, 1)]), ("elsin", [(3, 1), (3, 2), (2, 1), (1, 2), (1, 1)]), ("elsin", [(3, 1), (3, 2), (2, 1), (2, 0), (1, 1)]), ("elshin", [(3, 1), (3, 2), (2, 1), (2, 2), (1, 2), (0, 1)]), ("elshin", [(3, 1), (3, 2), (2, 1), (2, 2), (1, 2), (1, 1)]), ("ela", [(3, 1), (3, 2), (2, 3)]), ("elain", [(3, 1), (3, 2), (2, 3), (1, 2), (0, 1)]), ("elain", [(3, 1), (3, 2), (2, 3), (1, 2), (1, 1)]), ("elains", [(3, 1), (3, 2), (2, 3), (1, 2), (1, 1), (2, 1)]), ("elb", [(3, 1), (3, 2), (3, 3)]), ("l", [(3, 2)]), ("lh", [(3, 2), (2, 2)]), ("lhb", [(3, 2), (2, 2), (3, 3)]), ("ls", [(3, 2), (2, 1)]), ("la", [(3, 2), (2, 3)]), ("lai", [(3, 2), (2, 3), (1, 2)]), ("lair", [(3, 2), (2, 3), (1, 2), (0, 2)]), ("lain", [(3, 2), (2, 3), (1, 2), (0, 1)]), ("laisse", [(3, 2), (2, 3), (1, 2), (2, 1), (3, 0), (3, 1)]), ("lain", [(3, 2), (2, 3), (1, 2), (1, 1)]), ("lab", [(3, 2), (2, 3), (3, 3)]), ("lah", [(3, 2), (2, 3), (2, 2)]), ("le", [(3, 2), (3, 1)]), ("les", [(3, 2), (3, 1), (2, 1)]), ("less", [(3, 2), (3, 1), (2, 1), (3, 0)]), ("lei", [(3, 2), (3, 1), (2, 0)]), ("leis", [(3, 2), (3, 1), (2, 0), (3, 0)]), ("leiss", [(3, 2), (3, 1), (2, 0), (3, 0), (2, 1)]), ("leis", [(3, 2), (3, 1), (2, 0), (2, 1)]), ("leiss", [(3, 2), (3, 1), (2, 0), (2, 1), (3, 0)]), ("lehi", [(3, 2), (3, 1), (2, 2), (1, 2)]), ("les", [(3, 2), (3, 1), (3, 0)]), ("less", [(3, 2), (3, 1), (3, 0), (2, 1)]), ("lessn", [(3, 2), (3, 1), (3, 0), (2, 1), (1, 1)]), ("lb", [(3, 2), (3, 3)]), ("b", [(3, 3)]), ("ba", [(3, 3), (2, 3)]), ("bal", [(3, 3), (2, 3), (1, 3)]), ("bale", [(3, 3), (2, 3), (1, 3), (0, 3)]), ("balei", [(3, 3), (2, 3), (1, 3), (0, 3), (1, 2)]), ("baleise", [(3, 3), (2, 3), (1, 3), (0, 3), (1, 2), (2, 1), (3, 1)]), ("baler", [(3, 3), (2, 3), (1, 3), (0, 3), (0, 2)]), ("balr", [(3, 3), (2, 3), (1, 3), (0, 2)]), ("bali", [(3, 3), (2, 3), (1, 3), (1, 2)]), ("bai", [(3, 3), (2, 3), (1, 2)]), ("bairn", [(3, 3), (2, 3), (1, 2), (0, 2), (1, 1)]), ("bairns", [(3, 3), (2, 3), (1, 2), (0, 2), (1, 1), (2, 1)]), ("bairnie", [(3, 3), (2, 3), (1, 2), (0, 2), (1, 1), (2, 0), (3, 1)]), ("bairnish", [(3, 3), (2, 3), (1, 2), (0, 2), (1, 1), (2, 0), (2, 1), (2, 2)]), ("bairn", [(3, 3), (2, 3), (1, 2), (0, 2), (0, 1)]), ("bain", [(3, 3), (2, 3), (1, 2), (0, 1)]), ("bais", [(3, 3), (2, 3), (1, 2), (2, 1)]), ("bain", [(3, 3), (2, 3), (1, 2), (1, 1)]), ("bainie", [(3, 3), (2, 3), (1, 2), (1, 1), (2, 0), (3, 1)]), ("bail", [(3, 3), (2, 3), (1, 2), (1, 3)]), ("baile", [(3, 3), (2, 3), (1, 2), (1, 3), (0, 3)]), ("bailer", [(3, 3), (2, 3), (1, 2), (1, 3), (0, 3), (0, 2)]), ("bal", [(3, 3), (2, 3), (3, 2)]), ("bals", [(3, 3), (2, 3), (3, 2), (2, 1)]), ("bale", [(3, 3), (2, 3), (3, 2), (3, 1)]), ("bales", [(3, 3), (2, 3), (3, 2), (3, 1), (2, 1)]), ("balei", [(3, 3), (2, 3), (3, 2), (3, 1), (2, 0)]), ("bales", [(3, 3), (2, 3), (3, 2), (3, 1), (3, 0)]), ("bah", [(3, 3), (2, 3), (2, 2)]), ("bhil", [(3, 3), (2, 2), (1, 2), (1, 3)]), ("bl", [(3, 3), (3, 2)]), ("bls", [(3, 3), (3, 2), (2, 1)]), ("blair", [(3, 3), (3, 2), (2, 3), (1, 2), (0, 2)]), ("blain", [(3, 3), (3, 2), (2, 3), (1, 2), (0, 1)]), ("blain", [(3, 3), (3, 2), (2, 3), (1, 2), (1, 1)]), ("blains", [(3, 3), (3, 2), (2, 3), (1, 2), (1, 1), (2, 1)]), ("blah", [(3, 3), (3, 2), (2, 3), (2, 2)]), ("blahs", [(3, 3), (3, 2), (2, 3), (2, 2), (2, 1)]), ("bless", [(3, 3), (3, 2), (3, 1), (2, 1), (3, 0)]), ("bless", [(3, 3), (3, 2), (3, 1), (3, 0), (2, 1)]), ] # ----------------------------------------------------- # Solved board max 4-letter words # ----------------------------------------------------- # Init for word tree (4 board_4x4 or less) and fixtures @pytest.fixture def board_4(board_4x4): return BoggleBoard(board_4x4, 4) @pytest.fixture def tree_4(board_4): return build_full_boggle_tree(board_4, Path(WORDLISTS_DIR)) @pytest.fixture def found_words_4(tree_4): return list(chain.from_iterable([x.word_paths for x in tree_4.values()])) # Tests for solved board with max of 4-letter words def test_word_count_4_board_4x4_max(expected_words_max_4, tree_4): assert len(expected_words_max_4) == sum(map(lambda x: len(x.word_paths), tree_4.values())) def test_words_full_4_board_4x4_max(expected_words_max_4, found_words_4): """Verify words and paths match in exact order""" assert found_words_4 == expected_words_max_4 def test_format_words_4_to_csv(): pass def test_format_words_4_to_json(): pass # ----------------------------------------------------- # Solved board max 20-letter words # ----------------------------------------------------- # Init for word tree (20 board_4x4 or less) and fixtures @pytest.fixture def board_20(board_4x4): return BoggleBoard(board_4x4, 20) @pytest.fixture def tree_20(board_20): return build_full_boggle_tree(board_20, WORDLISTS_DIR) @pytest.fixture def found_words_20(tree_20): return list(chain.from_iterable([x.word_paths for x in tree_20.values()])) # Tests for solved board with max of 20-letter words def test_word_count_20_board_4x4_max(expected_words_max_20, tree_20): assert len(expected_words_max_20) == sum(map(lambda x: len(x.word_paths), tree_20.values())) def test_words_full_20_board_4x4_max(expected_words_max_20, found_words_20): assert found_words_20 == expected_words_max_20 def test_format_words_20_to_csv(): pass def test_format_words_20_to_json(): pass