You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

41 lines
1.2 KiB

from collections import Counter
from dictionary import Dictionary, DICTS
def make_key(dictionary_name, letters):
return (dictionary_name, frozenset(Counter(letters).items()))
def candidates(letters, dictionary: Dictionary, min=2, permutations=None):
letters = "".join(letters)
possibilities = []
for word in filter(lambda word: len(word) > min, dictionary.word_frequency.keys()):
letter_set = set(word)
if all(word.count(letter) < letters.count(letter) for letter in letter_set):
possibilities.append(word)
return possibilities
class CandidateCache:
def __init__(self, maxsize=5):
self.maxsize = maxsize
self.cache = {}
self.keys = []
def get(self, dictionary_name, letters):
key = make_key(dictionary_name, letters)
try:
return self.cache[key]
except KeyError:
data = candidates(letters, DICTS[dictionary_name])
self.create(key, data)
return data
def create(self, key, data):
if len(self.keys) > self.maxsize:
key = self.keys.pop()
del self.cache[key]
self.keys.insert(0, key)
self.cache[key] = data