Last active
January 4, 2020 06:52
-
-
Save jeffdonahue/3b091a30bf67106165cf069d94ee1369 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/local/bin/python3 | |
import itertools | |
import string | |
class Node: | |
"""A trie node.""" | |
def __init__(self, char, parent=None): | |
self._char = char | |
self._parent = parent | |
self.children = {} | |
self.is_terminal = False | |
def add_child(self, char): | |
if char not in self.children: | |
self.children[char] = Node(char, parent=self) | |
return self.children[char] | |
def add_sequence(self, chars): | |
if chars: | |
self.add_child(chars[0]).add_sequence(chars[1:]) | |
else: | |
# I'm the last node in the sequence, mark myself terminal. | |
self.is_terminal = True | |
def has_sequence(self, chars): | |
if not chars: | |
return self.is_terminal | |
try: | |
child = self.children[chars[0]] | |
except KeyError: | |
return False | |
return child.has_sequence(chars[1:]) | |
def get_prefix(self): | |
parent = self._parent | |
return (parent.get_prefix() if parent else '') + self._char | |
def get_words_with_chars(self, available_chars, words=None): | |
if words is None: | |
words = [] | |
if self.is_terminal: | |
words.append(self.get_prefix()) | |
for char in available_chars: | |
try: | |
child = self.children[char] | |
except KeyError: | |
continue | |
child.get_words_with_chars(available_chars, words) | |
return words | |
def build_trie(words): | |
root = Node('') | |
for word in words: | |
root.add_sequence(word) | |
return root | |
def get_wordlist(filename='wordlist.txt'): | |
with open(filename, 'r') as f: | |
words = [l.strip().lower() for l in f.readlines()] | |
return words | |
def prnow(*args, **kwargs): | |
kwargs['flush'] = True | |
return print(*args, **kwargs) | |
def points_for_word(rs, os, word): | |
is_good = ( | |
len(word) >= 4 and | |
all(r in word for r in rs) and | |
all(w in os for w in word) | |
) | |
if not is_good: | |
return 0 | |
length_points = 1 if len(word) == 4 else len(word) | |
pangram_points = 7 if all(o in word for o in os) else 0 | |
return length_points + pangram_points | |
def words_in_circle(required_letters, optional_letters, words): | |
"""Slow version using brute force.""" | |
os = set(required_letters) | set(optional_letters) | |
for word in words: | |
points = points_for_word(required_letters, os, word) | |
if points: | |
yield points, word | |
def words_in_circle_trie(required_letters, optional_letters, trie): | |
"""Fast version using a prebuilt trie.""" | |
os = set(required_letters) | set(optional_letters) | |
words = trie.get_words_with_chars(list(os)) | |
for word in words: | |
points = points_for_word(required_letters, os, word) | |
if points: | |
yield points, word | |
def sort_words_and_points(words_and_points): | |
"""Ranks the [(word, points)] list by points, then len(word), then ABC.""" | |
words_and_points.sort(key=lambda p_w: (-p_w[0], -len(p_w[1]), p_w[1])) | |
def go(letters=string.ascii_lowercase, circle_num=7, words=None, trie=None, | |
limit=None): | |
num = 0 | |
best_score = -1 | |
best_result = None | |
if trie: | |
f_words_in_circle = lambda c, o: words_in_circle_trie(c, o, trie) | |
else: | |
assert words is not None, 'Must specify either `words` or `tree`.' | |
f_words_in_circle = lambda c, o: words_in_circle(c, o, words) | |
for circle_letters in itertools.combinations(letters, circle_num): | |
for center_index, center_letter in enumerate(circle_letters): | |
if limit is not None and num >= limit: | |
prnow(f'Reached limit of {limit} combinations; quitting.') | |
return best_result | |
optional_letters = (circle_letters[:center_index] + | |
circle_letters[center_index+1:]) | |
found_words = list(f_words_in_circle(center_letter, optional_letters)) | |
sort_words_and_points(found_words) | |
total_score = sum(p for p, w in found_words) | |
puzzle_disp = f'({center_letter}){"".join(optional_letters)}' | |
if total_score > best_score: | |
prnow(f'!!!! NEW HIGH SCORE !!!! {puzzle_disp} -> {total_score} (> {best_score})') | |
best_score = total_score | |
best_result = dict(center_letter=center_letter, | |
optional_letters=optional_letters, | |
score=total_score, | |
words=found_words) | |
prnow(f'{puzzle_disp} score={total_score} (best={best_score}) ' | |
f'({len(found_words)} words): {found_words[:10]}') | |
num += 1 | |
return best_result | |
if __name__ == '__main__': | |
if True: | |
# Sanity checks. | |
assert points_for_word('g', 'alpgexm', 'meg') == 0 | |
assert points_for_word('g', 'alpgexm', 'meal') == 0 | |
assert points_for_word('g', 'alpgexm', 'megapler') == 0 | |
assert points_for_word('g', 'alpgexm', 'mega') == 1 | |
assert points_for_word('g', 'alpgexm', 'megap') == 5 | |
assert points_for_word('g', 'alpgexm', 'megapp') == 6 | |
assert points_for_word('g', 'alpgexm', 'megaplee') == 8 | |
assert points_for_word('g', 'alpgexm', 'megaplex') == 15 | |
prnow('Loading wordlist.') | |
all_words = get_wordlist() | |
prnow('Done loading wordlist.') | |
words = [w for w in all_words if len(w) >= 4] | |
letters = string.ascii_lowercase | |
disallow_chars = {'s'} # disallow 's' | |
for disallow_char in disallow_chars: | |
words = [w for w in words if disallow_char not in w] | |
letters = [l for l in letters if l != disallow_char] | |
# Check words are all lowercase. | |
charset = set(letters) | |
for word in words: | |
if not all(w in charset for w in word): | |
raise ValueError(f'Word has unexpected chars: {word}') | |
use_trie = True | |
if use_trie: | |
prnow(f'Building trie from {len(words)} words.') | |
trie = build_trie(words) | |
prnow(f'Done building trie.') | |
else: | |
trie = None | |
prnow('Running search.') | |
# limit = 100 # quick test | |
limit = None # forrealz | |
best_result = go(letters=letters, trie=trie, words=words, limit=limit) | |
prnow('Done.') | |
best_score = best_result['score'] | |
center = best_result['center_letter'] | |
optional = best_result['optional_letters'] | |
words_and_points = best_result['words'] | |
prnow(f'Best circle: ({center}){"".join(optional)}') | |
prnow(f'It scored {best_score}, from {len(words_and_points)} words.') | |
prnow(f'Words and points:') | |
prnow('\n'.join(f'\t{w} ({p})' for p, w in words_and_points)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading wordlist. | |
Done loading wordlist. | |
Building trie from 67985 words. | |
Done building trie. | |
Running search. | |
[...] | |
Done. | |
Best circle: (r)aegint | |
It scored 3898, from 537 words. | |
Words and points: | |
reaggregating (20) | |
reintegrating (20) | |
entertaining (19) | |
intenerating (19) | |
regenerating (19) | |
reinitiating (19) | |
aggregating (18) | |
gratineeing (18) | |
integrating (18) | |
itinerating (18) | |
reattaining (18) | |
reintegrate (18) | |
reiterating (18) | |
retargeting (18) | |
entraining (17) | |
entreating (17) | |
garnierite (17) | |
generating (17) | |
greatening (17) | |
ingratiate (17) | |
interregna (17) | |
intreating (17) | |
regranting (17) | |
retraining (17) | |
retreating (17) | |
argentine (16) | |
argentite (16) | |
gartering (16) | |
integrate (16) | |
intergang (16) | |
iterating (16) | |
nattering (16) | |
rattening (16) | |
regrating (16) | |
retagging (16) | |
retaining (16) | |
retearing (16) | |
tangerine (16) | |
targeting (16) | |
tattering (16) | |
aerating (15) | |
gnattier (15) | |
gratinee (15) | |
interage (15) | |
treating (15) | |
granite (14) | |
gratine (14) | |
ingrate (14) | |
tangier (14) | |
tearing (14) | |
reengineering (13) | |
ingratiating (12) | |
engineering (11) | |
entertainer (11) | |
reaggregate (11) | |
rearranging (11) | |
reinterring (11) | |
trinitarian (11) | |
arraigning (10) | |
engraining (10) | |
gangrening (10) | |
ingraining (10) | |
intenerate (10) | |
irrigating (10) | |
irritating (10) | |
reengaging (10) | |
reengineer (10) | |
reentering (10) | |
regenerate (10) | |
regreening (10) | |
regreeting (10) | |
regretting (10) | |
reigniting (10) | |
reinitiate (10) | |
retreatant (10) | |
triggering (10) | |
aggregate (9) | |
arranging (9) | |
arrearage (9) | |
entertain (9) | |
entrainer (9) | |
garnering (9) | |
gettering (9) | |
gingering (9) | |
greengage (9) | |
gregarine (9) | |
interning (9) | |
interring (9) | |
intrigant (9) | |
itinerant (9) | |
itinerate (9) | |
narrating (9) | |
nitrating (9) | |
rearrange (9) | |
reearning (9) | |
reentrant (9) | |
regaining (9) | |
regearing (9) | |
regretter (9) | |
reiterate (9) | |
renigging (9) | |
rerigging (9) | |
retinting (9) | |
retreater (9) | |
teetering (9) | |
tentering (9) | |
titrating (9) | |
tittering (9) | |
agrarian (8) | |
agreeing (8) | |
aigrette (8) | |
anearing (8) | |
angering (8) | |
anteater (8) | |
antiarin (8) | |
arginine (8) | |
arranger (8) | |
attainer (8) | |
attiring (8) | |
engineer (8) | |
enraging (8) | |
entering (8) | |
gangrene (8) | |
garaging (8) | |
generate (8) | |
gnarring (8) | |
grainier (8) | |
graining (8) | |
granting (8) | |
greegree (8) | |
greenier (8) | |
greening (8) | |
greeting (8) | |
grinning (8) | |
grittier (8) | |
gritting (8) | |
inerrant (8) | |
inertiae (8) | |
internee (8) | |
intertie (8) | |
irrigate (8) | |
irritant (8) | |
irritate (8) | |
narrater (8) | |
rattener (8) | |
reattain (8) | |
reengage (8) | |
regainer (8) | |
reigning (8) | |
reignite (8) | |
reneging (8) | |
renitent (8) | |
retainer (8) | |
retarget (8) | |
retiarii (8) | |
retinene (8) | |
retinite (8) | |
retirant (8) | |
retiring (8) | |
tartrate (8) | |
teenager (8) | |
terraria (8) | |
titterer (8) | |
training (8) | |
triaging (8) | |
triennia (8) | |
trigging (8) | |
aginner (7) | |
airting (7) | |
anergia (7) | |
angaria (7) | |
angrier (7) | |
antiair (7) | |
arenite (7) | |
arietta (7) | |
ariette (7) | |
arraign (7) | |
arrange (7) | |
attrite (7) | |
eagerer (7) | |
earning (7) | |
earring (7) | |
engager (7) | |
engrain (7) | |
enterer (7) | |
entrain (7) | |
entrant (7) | |
entreat (7) | |
etagere (7) | |
garring (7) | |
gearing (7) | |
ginnier (7) | |
girning (7) | |
girting (7) | |
gittern (7) | |
grainer (7) | |
granger (7) | |
granita (7) | |
grannie (7) | |
grantee (7) | |
granter (7) | |
grating (7) | |
greaten (7) | |
greater (7) | |
greeing (7) | |
greener (7) | |
greenie (7) | |
greeter (7) | |
grinner (7) | |
igniter (7) | |
inertia (7) | |
ingrain (7) | |
integer (7) | |
interne (7) | |
intrant (7) | |
intreat (7) | |
iterant (7) | |
iterate (7) | |
naggier (7) | |
narrate (7) | |
nattier (7) | |
nearing (7) | |
negater (7) | |
nettier (7) | |
niterie (7) | |
nitrate (7) | |
nitrite (7) | |
nittier (7) | |
ragging (7) | |
rainier (7) | |
raining (7) | |
rangier (7) | |
ranging (7) | |
ranting (7) | |
ratatat (7) | |
ratteen (7) | |
rattier (7) | |
ratting (7) | |
reagent (7) | |
rearing (7) | |
reenter (7) | |
regatta (7) | |
reginae (7) | |
regnant (7) | |
regrant (7) | |
regrate (7) | |
regreen (7) | |
regreet (7) | |
reining (7) | |
reinter (7) | |
reneger (7) | |
rentier (7) | |
renting (7) | |
retinae (7) | |
retiree (7) | |
retirer (7) | |
retrain (7) | |
retreat (7) | |
retting (7) | |
rigging (7) | |
ringent (7) | |
ringgit (7) | |
ringing (7) | |
rinning (7) | |
tanager (7) | |
tantara (7) | |
tarrier (7) | |
tarring (7) | |
tartana (7) | |
tarting (7) | |
tattier (7) | |
tearier (7) | |
teenier (7) | |
tentier (7) | |
tergite (7) | |
ternate (7) | |
terrain (7) | |
terrane (7) | |
terreen (7) | |
terrene (7) | |
terrier (7) | |
terrine (7) | |
tertian (7) | |
tiering (7) | |
tinnier (7) | |
titrant (7) | |
titrate (7) | |
trainee (7) | |
trainer (7) | |
treater (7) | |
treeing (7) | |
trigger (7) | |
trining (7) | |
aerate (6) | |
aerier (6) | |
aigret (6) | |
airier (6) | |
airing (6) | |
antiar (6) | |
argent (6) | |
arrant (6) | |
arrear (6) | |
artier (6) | |
attire (6) | |
earing (6) | |
earner (6) | |
eerier (6) | |
engirt (6) | |
enrage (6) | |
entera (6) | |
entire (6) | |
entree (6) | |
ergate (6) | |
errant (6) | |
errata (6) | |
erring (6) | |
eterne (6) | |
gagger (6) | |
gainer (6) | |
gaiter (6) | |
ganger (6) | |
garage (6) | |
garget (6) | |
garner (6) | |
garnet (6) | |
garret (6) | |
garter (6) | |
genera (6) | |
gerent (6) | |
getter (6) | |
ginger (6) | |
ginner (6) | |
grange (6) | |
grater (6) | |
gratin (6) | |
greige (6) | |
grigri (6) | |
inaner (6) | |
intern (6) | |
irater (6) | |
nagger (6) | |
narine (6) | |
natter (6) | |
nearer (6) | |
neater (6) | |
netter (6) | |
nigger (6) | |
raggee (6) | |
raging (6) | |
ragtag (6) | |
ranger (6) | |
ranter (6) | |
raring (6) | |
ratine (6) | |
rating (6) | |
ratite (6) | |
rattan (6) | |
ratten (6) | |
ratter (6) | |
reagin (6) | |
rearer (6) | |
reearn (6) | |
regain (6) | |
regear (6) | |
regent (6) | |
reggae (6) | |
regina (6) | |
regret (6) | |
renege (6) | |
rennet (6) | |
rennin (6) | |
renter (6) | |
retain (6) | |
retear (6) | |
retene (6) | |
retina (6) | |
retine (6) | |
retint (6) | |
retire (6) | |
rigger (6) | |
ringer (6) | |
ritter (6) | |
tagger (6) | |
tagrag (6) | |
tanner (6) | |
tantra (6) | |
target (6) | |
taring (6) | |
tartan (6) | |
tartar (6) | |
tarter (6) | |
tatter (6) | |
tearer (6) | |
teener (6) | |
teeter (6) | |
tenner (6) | |
tenter (6) | |
terete (6) | |
terrae (6) | |
terret (6) | |
territ (6) | |
tetter (6) | |
tinier (6) | |
tinner (6) | |
tinter (6) | |
tiring (6) | |
titter (6) | |
triage (6) | |
triene (6) | |
triter (6) | |
aerie (5) | |
agger (5) | |
agree (5) | |
agria (5) | |
airer (5) | |
anear (5) | |
anger (5) | |
antra (5) | |
antre (5) | |
areae (5) | |
arena (5) | |
arete (5) | |
atria (5) | |
attar (5) | |
eager (5) | |
eagre (5) | |
eater (5) | |
eerie (5) | |
eggar (5) | |
egger (5) | |
egret (5) | |
enter (5) | |
gager (5) | |
garni (5) | |
genre (5) | |
gnarr (5) | |
grain (5) | |
grana (5) | |
grant (5) | |
grate (5) | |
great (5) | |
green (5) | |
greet (5) | |
inert (5) | |
inner (5) | |
inter (5) | |
irate (5) | |
iring (5) | |
naira (5) | |
niter (5) | |
nitre (5) | |
ragee (5) | |
ranee (5) | |
range (5) | |
rarer (5) | |
ratan (5) | |
rater (5) | |
reata (5) | |
regna (5) | |
reign (5) | |
renig (5) | |
renin (5) | |
rente (5) | |
reran (5) | |
rerig (5) | |
retag (5) | |
retia (5) | |
retie (5) | |
riant (5) | |
riata (5) | |
targe (5) | |
tarre (5) | |
tatar (5) | |
tater (5) | |
terai (5) | |
terga (5) | |
terne (5) | |
terra (5) | |
tetra (5) | |
tiara (5) | |
tiger (5) | |
titer (5) | |
titre (5) | |
tragi (5) | |
train (5) | |
trait (5) | |
treat (5) | |
treen (5) | |
trier (5) | |
trine (5) | |
trite (5) | |
agar (1) | |
ager (1) | |
airn (1) | |
airt (1) | |
area (1) | |
aria (1) | |
earn (1) | |
eger (1) | |
erne (1) | |
gear (1) | |
girn (1) | |
girt (1) | |
gnar (1) | |
gran (1) | |
grat (1) | |
gree (1) | |
grig (1) | |
grin (1) | |
grit (1) | |
near (1) | |
raga (1) | |
rage (1) | |
ragi (1) | |
raia (1) | |
rain (1) | |
rang (1) | |
rani (1) | |
rant (1) | |
rare (1) | |
rate (1) | |
rear (1) | |
rein (1) | |
rent (1) | |
rete (1) | |
ring (1) | |
rite (1) | |
tare (1) | |
tarn (1) | |
tart (1) | |
tear (1) | |
tern (1) | |
tier (1) | |
tire (1) | |
tree (1) | |
tret (1) | |
trig (1) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading wordlist. | |
Done loading wordlist. | |
Building trie from 171752 words. | |
Done building trie. | |
Running search. | |
[...] | |
Done. | |
Best circle: (e)ainrst | |
It scored 8681, from 1179 words. | |
Words and points: | |
entertainers (19) | |
interstrains (19) | |
straitnesses (19) | |
intenerates (18) | |
interstates (18) | |
interstrain (18) | |
iratenesses (18) | |
itineraries (18) | |
reinitiates (18) | |
restrainers (18) | |
tristearins (18) | |
antistress (17) | |
artinesses (17) | |
entertains (17) | |
entrainers (17) | |
entreaties (17) | |
errantries (17) | |
interstate (17) | |
intrastate (17) | |
itinerants (17) | |
itinerates (17) | |
reinstates (17) | |
resistants (17) | |
restrainer (17) | |
restraints (17) | |
sanitaries (17) | |
stannaries (17) | |
straitness (17) | |
tanistries (17) | |
tearstains (17) | |
tenantries (17) | |
transients (17) | |
tristearin (17) | |
arsenites (16) | |
attainers (16) | |
instanter (16) | |
irateness (16) | |
reattains (16) | |
reinstate (16) | |
resinates (16) | |
resistant (16) | |
restrains (16) | |
restraint (16) | |
retainers (16) | |
retirants (16) | |
seatrains (16) | |
stearines (16) | |
strainers (16) | |
straitens (16) | |
tanneries (16) | |
tearstain (16) | |
ternaries (16) | |
transient (16) | |
insatiatenesses (15) | |
instantaneities (15) | |
antisera (15) | |
arenites (15) | |
arsenite (15) | |
artiness (15) | |
entrains (15) | |
inertias (15) | |
intreats (15) | |
nitrates (15) | |
rainiest (15) | |
ratanies (15) | |
resinate (15) | |
restrain (15) | |
retrains (15) | |
retsinas (15) | |
seatrain (15) | |
stainers (15) | |
stearine (15) | |
stearins (15) | |
strainer (15) | |
straiten (15) | |
terrains (15) | |
tertians (15) | |
trainees (15) | |
trainers (15) | |
sinisternesses (14) | |
anestri (14) | |
antsier (14) | |
nastier (14) | |
ratines (14) | |
retains (14) | |
retinas (14) | |
retsina (14) | |
stainer (14) | |
stearin (14) | |
earnestnesses (13) | |
insatiateness (13) | |
instantnesses (13) | |
intensenesses (13) | |
assassinates (12) | |
entirenesses (12) | |
innatenesses (12) | |
insanenesses (12) | |
instantiates (12) | |
intentnesses (12) | |
serenenesses (12) | |
sinisterness (12) | |
asininities (11) | |
assassinate (11) | |
earnestness (11) | |
enteritises (11) | |
entertainer (11) | |
inanenesses (11) | |
inertnesses (11) | |
instantiate (11) | |
instantness (11) | |
intenseness (11) | |
intensities (11) | |
nastinesses (11) | |
nattinesses (11) | |
retreatants (11) | |
sternnesses (11) | |
tastinesses (11) | |
tattinesses (11) | |
tensenesses (11) | |
tersenesses (11) | |
testinesses (11) | |
tinninesses (11) | |
traitresses (11) | |
tritenesses (11) | |
airinesses (10) | |
arrestants (10) | |
artistries (10) | |
easinesses (10) | |
easterners (10) | |
eerinesses (10) | |
entireness (10) | |
entireties (10) | |
eternities (10) | |
innateness (10) | |
insaneness (10) | |
insanities (10) | |
insentient (10) | |
intenerate (10) | |
intentness (10) | |
internists (10) | |
intestates (10) | |
intestines (10) | |
nearnesses (10) | |
neatnesses (10) | |
rarenesses (10) | |
reassesses (10) | |
reentrants (10) | |
reinitiate (10) | |
reiterates (10) | |
restresses (10) | |
retreatant (10) | |
retreaters (10) | |
sanenesses (10) | |
sensitises (10) | |
sententiae (10) | |
sereneness (10) | |
serenities (10) | |
tarantases (10) | |
tartnesses (10) | |
teentsiest (10) | |
tertiaries (10) | |
tininesses (10) | |
titanesses (10) | |
anisettes (9) | |
anserines (9) | |
anteaters (9) | |
antisense (9) | |
antistate (9) | |
arrestant (9) | |
arrestees (9) | |
arresters (9) | |
arsenates (9) | |
arteritis (9) | |
assenters (9) | |
asserters (9) | |
assisters (9) | |
astatines (9) | |
attesters (9) | |
easterner (9) | |
einsteins (9) | |
ensnarers (9) | |
enteritis (9) | |
entertain (9) | |
entrainer (9) | |
esterases (9) | |
eternises (9) | |
inaneness (9) | |
inanities (9) | |
inertness (9) | |
initiates (9) | |
insatiate (9) | |
insensate (9) | |
inserters (9) | |
insetters (9) | |
insistent (9) | |
insisters (9) | |
insnarers (9) | |
intensest (9) | |
interests (9) | |
internees (9) | |
internist (9) | |
interties (9) | |
intestate (9) | |
intestine (9) | |
irritates (9) | |
itinerant (9) | |
itinerate (9) | |
narraters (9) | |
nastiness (9) | |
nattiness (9) | |
nineteens (9) | |
ratteners (9) | |
rearrests (9) | |
reasserts (9) | |
reentrant (9) | |
reentries (9) | |
reinserts (9) | |
reiterate (9) | |
resetters (9) | |
resisters (9) | |
retinenes (9) | |
retinites (9) | |
retinitis (9) | |
retreater (9) | |
sanitates (9) | |
sanitises (9) | |
sarsenets (9) | |
satieties (9) | |
satirises (9) | |
seeresses (9) | |
sensitise (9) | |
sententia (9) | |
sentients (9) | |
serenatas (9) | |
sestertia (9) | |
setenants (9) | |
sirenians (9) | |
stannites (9) | |
starriest (9) | |
stearates (9) | |
steatites (9) | |
sternites (9) | |
sternness (9) | |
straitest (9) | |
taeniases (9) | |
taeniasis (9) | |
tartrates (9) | |
tastiness (9) | |
tattiness (9) | |
teensiest (9) | |
teentsier (9) | |
tenseness (9) | |
tensities (9) | |
terseness (9) | |
testiness (9) | |
tetanises (9) | |
tinniness (9) | |
titanates (9) | |
titanites (9) | |
titterers (9) | |
traitress (9) | |
treatises (9) | |
tressiest (9) | |
trinities (9) | |
triteness (9) | |
airiness (8) | |
anatases (8) | |
anisette (8) | |
anserine (8) | |
anteater (8) | |
antennae (8) | |
antennas (8) | |
antsiest (8) | |
ariettas (8) | |
ariettes (8) | |
aristate (8) | |
arrestee (8) | |
arrester (8) | |
arsenate (8) | |
arteries (8) | |
artistes (8) | |
artsiest (8) | |
assenter (8) | |
asserter (8) | |
assesses (8) | |
assister (8) | |
astatine (8) | |
asterias (8) | |
atresias (8) | |
attainer (8) | |
attester (8) | |
earnests (8) | |
easiness (8) | |
eateries (8) | |
eeriness (8) | |
einstein (8) | |
ensnarer (8) | |
ensnares (8) | |
entasias (8) | |
ententes (8) | |
enterers (8) | |
entities (8) | |
entrants (8) | |
entreats (8) | |
eserines (8) | |
esterase (8) | |
estreats (8) | |
eternise (8) | |
etesians (8) | |
inerrant (8) | |
inertiae (8) | |
initiate (8) | |
insanest (8) | |
inserter (8) | |
insetter (8) | |
insister (8) | |
insnarer (8) | |
insnares (8) | |
instates (8) | |
intenser (8) | |
interest (8) | |
internee (8) | |
internes (8) | |
intertie (8) | |
iritises (8) | |
irritate (8) | |
isatines (8) | |
iterates (8) | |
narrater (8) | |
narrates (8) | |
nastiest (8) | |
nattiest (8) | |
nearness (8) | |
neatness (8) | |
nettiest (8) | |
nineteen (8) | |
nineties (8) | |
niteries (8) | |
nitrites (8) | |
nittiest (8) | |
rareness (8) | |
rarities (8) | |
ratteens (8) | |
rattener (8) | |
rattiest (8) | |
rearrest (8) | |
reassert (8) | |
reassess (8) | |
reattain (8) | |
reenters (8) | |
reinsert (8) | |
reinters (8) | |
renitent (8) | |
rennases (8) | |
rentiers (8) | |
reraises (8) | |
resetter (8) | |
resister (8) | |
restarts (8) | |
restates (8) | |
restress (8) | |
retainer (8) | |
retastes (8) | |
retiarii (8) | |
retinene (8) | |
retinite (8) | |
retirant (8) | |
retirees (8) | |
retirers (8) | |
retreats (8) | |
saneness (8) | |
sanitate (8) | |
sanities (8) | |
sanitise (8) | |
sarsenet (8) | |
sassiest (8) | |
satiates (8) | |
satinets (8) | |
satirise (8) | |
sensates (8) | |
sentient (8) | |
sentries (8) | |
serenata (8) | |
serenate (8) | |
serenest (8) | |
seriates (8) | |
serrates (8) | |
sestinas (8) | |
sestines (8) | |
setenant (8) | |
sienites (8) | |
sinister (8) | |
sirenian (8) | |
sissiest (8) | |
sneerers (8) | |
stanines (8) | |
stannite (8) | |
starrier (8) | |
starters (8) | |
stearate (8) | |
steatite (8) | |
steerers (8) | |
sternest (8) | |
sternite (8) | |
stinters (8) | |
stirrers (8) | |
straiter (8) | |
strasses (8) | |
stresses (8) | |
strettas (8) | |
striates (8) | |
tannates (8) | |
tarriers (8) | |
tarriest (8) | |
tarsiers (8) | |
tartness (8) | |
tartrate (8) | |
tastiest (8) | |
tattiest (8) | |
teariest (8) | |
teeniest (8) | |
teensier (8) | |
teniases (8) | |
teniasis (8) | |
tennises (8) | |
tennists (8) | |
tentiest (8) | |
terranes (8) | |
terraria (8) | |
terrases (8) | |
terreens (8) | |
terrenes (8) | |
terriers (8) | |
terrines (8) | |
tesserae (8) | |
testates (8) | |
testiest (8) | |
tetanies (8) | |
tetanise (8) | |
tininess (8) | |
tinniest (8) | |
titanate (8) | |
titaness (8) | |
titanite (8) | |
titrates (8) | |
titterer (8) | |
treaters (8) | |
treaties (8) | |
treatise (8) | |
tressier (8) | |
triennia (8) | |
trientes (8) | |
tristate (8) | |
aerates (7) | |
aeriest (7) | |
airiest (7) | |
anatase (7) | |
annates (7) | |
antenna (7) | |
arenite (7) | |
arietta (7) | |
ariette (7) | |
aristae (7) | |
arrears (7) | |
arrests (7) | |
arrises (7) | |
arsines (7) | |
artiest (7) | |
artiste (7) | |
artsier (7) | |
asinine (7) | |
assents (7) | |
asserts (7) | |
asteria (7) | |
atresia (7) | |
attests (7) | |
attires (7) | |
attrite (7) | |
earners (7) | |
earnest (7) | |
easiest (7) | |
eastern (7) | |
easters (7) | |
eeriest (7) | |
ensnare (7) | |
entases (7) | |
entasia (7) | |
entasis (7) | |
entente (7) | |
enterer (7) | |
entires (7) | |
entrain (7) | |
entrant (7) | |
entreat (7) | |
entrees (7) | |
entries (7) | |
erasers (7) | |
errants (7) | |
erratas (7) | |
eserine (7) | |
estates (7) | |
estreat (7) | |
estrins (7) | |
etatist (7) | |
etesian (7) | |
inanest (7) | |
inertia (7) | |
insaner (7) | |
inserts (7) | |
insnare (7) | |
instate (7) | |
intense (7) | |
intents (7) | |
interne (7) | |
interns (7) | |
intines (7) | |
intreat (7) | |
iratest (7) | |
isatine (7) | |
iterant (7) | |
iterate (7) | |
nannies (7) | |
narrate (7) | |
nasties (7) | |
natters (7) | |
nattier (7) | |
nearest (7) | |
neatens (7) | |
neatest (7) | |
nesters (7) | |
netters (7) | |
nettier (7) | |
ninnies (7) | |
niterie (7) | |
nitrate (7) | |
nitrite (7) | |
nittier (7) | |
rainier (7) | |
raisers (7) | |
ranters (7) | |
rasters (7) | |
ratites (7) | |
ratteen (7) | |
rattens (7) | |
ratters (7) | |
rattier (7) | |
rearers (7) | |
reearns (7) | |
reenter (7) | |
reinter (7) | |
renests (7) | |
rennase (7) | |
rennets (7) | |
rennins (7) | |
renters (7) | |
rentier (7) | |
reraise (7) | |
rerisen (7) | |
rerises (7) | |
reseats (7) | |
resents (7) | |
resists (7) | |
resites (7) | |
restart (7) | |
restate (7) | |
resters (7) | |
retaste (7) | |
retears (7) | |
retenes (7) | |
retests (7) | |
retinae (7) | |
retines (7) | |
retints (7) | |
retiree (7) | |
retirer (7) | |
retires (7) | |
retrain (7) | |
retreat (7) | |
retries (7) | |
rinsers (7) | |
ritters (7) | |
sanseis (7) | |
sarsens (7) | |
sassier (7) | |
sassies (7) | |
sateens (7) | |
satiate (7) | |
satinet (7) | |
satires (7) | |
searest (7) | |
seaters (7) | |
seeress (7) | |
seiners (7) | |
seisers (7) | |
seisins (7) | |
senarii (7) | |
senates (7) | |
sennets (7) | |
sennits (7) | |
sensate (7) | |
sereins (7) | |
serener (7) | |
serenes (7) | |
seriate (7) | |
serines (7) | |
serrate (7) | |
serries (7) | |
sestets (7) | |
sestina (7) | |
sestine (7) | |
settees (7) | |
setters (7) | |
sienite (7) | |
siennas (7) | |
sierran (7) | |
sierras (7) | |
siestas (7) | |
sinners (7) | |
sinters (7) | |
sirrees (7) | |
sissier (7) | |
sissies (7) | |
sisters (7) | |
sitters (7) | |
snarers (7) | |
sneerer (7) | |
stanine (7) | |
starers (7) | |
starets (7) | |
starter (7) | |
staters (7) | |
steerer (7) | |
sterner (7) | |
stinter (7) | |
stirrer (7) | |
streets (7) | |
stretta (7) | |
strette (7) | |
stretti (7) | |
striate (7) | |
taeniae (7) | |
taenias (7) | |
tannate (7) | |
tanners (7) | |
tannest (7) | |
tansies (7) | |
tarrier (7) | |
tarries (7) | |
tarsier (7) | |
tartest (7) | |
tassets (7) | |
tassies (7) | |
tasters (7) | |
tastier (7) | |
tatters (7) | |
tattier (7) | |
tatties (7) | |
tearers (7) | |
tearier (7) | |
teasers (7) | |
teeners (7) | |
teenier (7) | |
teeters (7) | |
tenants (7) | |
tenners (7) | |
tennies (7) | |
tennist (7) | |
tensest (7) | |
tenters (7) | |
tentier (7) | |
ternate (7) | |
terrain (7) | |
terrane (7) | |
terreen (7) | |
terrene (7) | |
terrets (7) | |
terrier (7) | |
terries (7) | |
terrine (7) | |
territs (7) | |
tersest (7) | |
tertian (7) | |
tessera (7) | |
testate (7) | |
testees (7) | |
testers (7) | |
testier (7) | |
tetters (7) | |
tiniest (7) | |
tinners (7) | |
tinnier (7) | |
tinters (7) | |
tisanes (7) | |
titrate (7) | |
titters (7) | |
titties (7) | |
trainee (7) | |
trainer (7) | |
trasses (7) | |
treater (7) | |
tresses (7) | |
trienes (7) | |
tritest (7) | |
tsetses (7) | |
aerate (6) | |
aerier (6) | |
aeries (6) | |
airers (6) | |
airest (6) | |
airier (6) | |
anears (6) | |
anenst (6) | |
anises (6) | |
ansate (6) | |
antres (6) | |
arenas (6) | |
aretes (6) | |
arisen (6) | |
arises (6) | |
arrear (6) | |
arrest (6) | |
arsine (6) | |
artier (6) | |
assent (6) | |
assert (6) | |
assess (6) | |
assets (6) | |
astern (6) | |
asters (6) | |
attent (6) | |
attest (6) | |
attire (6) | |
earner (6) | |
easier (6) | |
easies (6) | |
easter (6) | |
eaters (6) | |
eerier (6) | |
enates (6) | |
entera (6) | |
enters (6) | |
entire (6) | |
entree (6) | |
eraser (6) | |
erases (6) | |
errant (6) | |
errata (6) | |
estate (6) | |
esters (6) | |
estrin (6) | |
eterne (6) | |
inaner (6) | |
inanes (6) | |
inerts (6) | |
innate (6) | |
inners (6) | |
insane (6) | |
insert (6) | |
insets (6) | |
intent (6) | |
intern (6) | |
inters (6) | |
intine (6) | |
irater (6) | |
irises (6) | |
isseis (6) | |
nannie (6) | |
narine (6) | |
natter (6) | |
nearer (6) | |
neaten (6) | |
neater (6) | |
nereis (6) | |
nesses (6) | |
nester (6) | |
netter (6) | |
niseis (6) | |
niters (6) | |
nitres (6) | |
raiser (6) | |
raises (6) | |
ranees (6) | |
ranter (6) | |
rarest (6) | |
rasers (6) | |
raster (6) | |
raters (6) | |
ratine (6) | |
ratite (6) | |
ratten (6) | |
ratter (6) | |
rearer (6) | |
reatas (6) | |
reearn (6) | |
reests (6) | |
renest (6) | |
renins (6) | |
rennet (6) | |
rennin (6) | |
renter (6) | |
rentes (6) | |
rerise (6) | |
reseat (6) | |
reseen (6) | |
resees (6) | |
resent (6) | |
resets (6) | |
resins (6) | |
resist (6) | |
resite (6) | |
rester (6) | |
retain (6) | |
retear (6) | |
retene (6) | |
retest (6) | |
reties (6) | |
retina (6) | |
retine (6) | |
retint (6) | |
retire (6) | |
rinser (6) | |
rinses (6) | |
risers (6) | |
ritter (6) | |
sanest (6) | |
sanies (6) | |
sansei (6) | |
sarees (6) | |
sarsen (6) | |
sasses (6) | |
sateen (6) | |
satire (6) | |
searer (6) | |
seater (6) | |
seiner (6) | |
seines (6) | |
seiser (6) | |
seises (6) | |
seisin (6) | |
senate (6) | |
seniti (6) | |
sennas (6) | |
sennet (6) | |
sennit (6) | |
senses (6) | |
serais (6) | |
serein (6) | |
serene (6) | |
serest (6) | |
series (6) | |
serine (6) | |
serins (6) | |
sestet (6) | |
settee (6) | |
setter (6) | |
sienna (6) | |
sierra (6) | |
siesta (6) | |
sinner (6) | |
sinter (6) | |
sirees (6) | |
sirens (6) | |
sirree (6) | |
sister (6) | |
sitten (6) | |
sitter (6) | |
snarer (6) | |
snares (6) | |
sneers (6) | |
stanes (6) | |
starer (6) | |
stares (6) | |
stases (6) | |
stater (6) | |
states (6) | |
steers (6) | |
steins (6) | |
steres (6) | |
sterna (6) | |
sterns (6) | |
street (6) | |
stress (6) | |
striae (6) | |
taenia (6) | |
tanner (6) | |
tarres (6) | |
tarter (6) | |
tasses (6) | |
tasset (6) | |
tassie (6) | |
taster (6) | |
tastes (6) | |
taters (6) | |
tatter (6) | |
tattie (6) | |
tearer (6) | |
teaser (6) | |
teases (6) | |
teener (6) | |
teeter (6) | |
tenant (6) | |
tenets (6) | |
teniae (6) | |
tenias (6) | |
tenner (6) | |
tennis (6) | |
tenser (6) | |
tenses (6) | |
tenter (6) | |
tentie (6) | |
terais (6) | |
terete (6) | |
ternes (6) | |
terrae (6) | |
terras (6) | |
terret (6) | |
territ (6) | |
terser (6) | |
testae (6) | |
testee (6) | |
tester (6) | |
testes (6) | |
testis (6) | |
tetras (6) | |
tetter (6) | |
tineas (6) | |
tinier (6) | |
tinner (6) | |
tinter (6) | |
tisane (6) | |
titers (6) | |
titres (6) | |
titter (6) | |
tittie (6) | |
treats (6) | |
treens (6) | |
triene (6) | |
triens (6) | |
triers (6) | |
trines (6) | |
triste (6) | |
triter (6) | |
tsetse (6) | |
aerie (5) | |
airer (5) | |
anear (5) | |
anent (5) | |
anise (5) | |
ansae (5) | |
antae (5) | |
antes (5) | |
antre (5) | |
areae (5) | |
areas (5) | |
arena (5) | |
arete (5) | |
arise (5) | |
arses (5) | |
asses (5) | |
asset (5) | |
aster (5) | |
earns (5) | |
eases (5) | |
easts (5) | |
eaten (5) | |
eater (5) | |
eerie (5) | |
enate (5) | |
enter (5) | |
entia (5) | |
erase (5) | |
ernes (5) | |
erses (5) | |
esses (5) | |
ester (5) | |
etnas (5) | |
inane (5) | |
inert (5) | |
inner (5) | |
inset (5) | |
inter (5) | |
irate (5) | |
issei (5) | |
nares (5) | |
nates (5) | |
nears (5) | |
neats (5) | |
neist (5) | |
nerts (5) | |
nests (5) | |
netts (5) | |
nines (5) | |
nisei (5) | |
niter (5) | |
nites (5) | |
nitre (5) | |
raise (5) | |
ranee (5) | |
rarer (5) | |
rares (5) | |
raser (5) | |
rases (5) | |
rater (5) | |
rates (5) | |
rears (5) | |
reata (5) | |
reest (5) | |
reins (5) | |
renin (5) | |
rente (5) | |
rents (5) | |
reran (5) | |
resee (5) | |
reset (5) | |
resin (5) | |
rests (5) | |
retia (5) | |
retie (5) | |
rinse (5) | |
risen (5) | |
riser (5) | |
rises (5) | |
rites (5) | |
saner (5) | |
sanes (5) | |
saree (5) | |
sates (5) | |
sears (5) | |
seats (5) | |
seers (5) | |
seine (5) | |
seise (5) | |
senna (5) | |
sensa (5) | |
sense (5) | |
sente (5) | |
senti (5) | |
serai (5) | |
serer (5) | |
seres (5) | |
serin (5) | |
setae (5) | |
setts (5) | |
sines (5) | |
siree (5) | |
siren (5) | |
sires (5) | |
sises (5) | |
sites (5) | |
snare (5) | |
sneer (5) | |
stane (5) | |
stare (5) | |
state (5) | |
steer (5) | |
stein (5) | |
stere (5) | |
stern (5) | |
stets (5) | |
sties (5) | |
tares (5) | |
tarre (5) | |
tasse (5) | |
taste (5) | |
tater (5) | |
tates (5) | |
tears (5) | |
tease (5) | |
teats (5) | |
teens (5) | |
tenet (5) | |
tenia (5) | |
tense (5) | |
tents (5) | |
terai (5) | |
terne (5) | |
terns (5) | |
terra (5) | |
terse (5) | |
testa (5) | |
tests (5) | |
tetra (5) | |
tiers (5) | |
tinea (5) | |
tines (5) | |
tires (5) | |
titer (5) | |
titre (5) | |
treat (5) | |
treen (5) | |
trees (5) | |
tress (5) | |
trets (5) | |
trier (5) | |
tries (5) | |
trine (5) | |
trite (5) | |
anes (1) | |
ante (1) | |
area (1) | |
ares (1) | |
arse (1) | |
asea (1) | |
ates (1) | |
earn (1) | |
ears (1) | |
ease (1) | |
east (1) | |
eats (1) | |
eras (1) | |
erne (1) | |
erns (1) | |
errs (1) | |
erst (1) | |
eses (1) | |
etas (1) | |
etna (1) | |
ires (1) | |
near (1) | |
neat (1) | |
nene (1) | |
ness (1) | |
nest (1) | |
nets (1) | |
nett (1) | |
nine (1) | |
nite (1) | |
rare (1) | |
rase (1) | |
rate (1) | |
rear (1) | |
rees (1) | |
rein (1) | |
reis (1) | |
rent (1) | |
rest (1) | |
rete (1) | |
rets (1) | |
rise (1) | |
rite (1) | |
sane (1) | |
sate (1) | |
sear (1) | |
seas (1) | |
seat (1) | |
seen (1) | |
seer (1) | |
sees (1) | |
seis (1) | |
sene (1) | |
sent (1) | |
sera (1) | |
sere (1) | |
sers (1) | |
seta (1) | |
sets (1) | |
sett (1) | |
sine (1) | |
sire (1) | |
site (1) | |
stet (1) | |
tare (1) | |
tate (1) | |
tear (1) | |
teas (1) | |
teat (1) | |
teen (1) | |
tees (1) | |
tens (1) | |
tent (1) | |
tern (1) | |
test (1) | |
tets (1) | |
tier (1) | |
ties (1) | |
tine (1) | |
tire (1) | |
tree (1) | |
tret (1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment