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.
|
|
from collections import Counterfrom 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
|