summaryrefslogtreecommitdiff
path: root/unscrambler.py
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2022-02-08 13:08:52 -0800
committerScott Gasch <[email protected]>2022-02-08 13:08:52 -0800
commit5c212d7639f62fcb936f9d7a0bbe704a9f7b213d (patch)
tree7141828ab58490339e535d2873fe86d9f33d0c48 /unscrambler.py
parentdfc2136113428b99719c49a57d3ce68391dcb307 (diff)
Hook in pylint to the pre-commit hook and start to fix some of its
warnings. It seems pickier than flake8 which is probably a good thing.
Diffstat (limited to 'unscrambler.py')
-rw-r--r--unscrambler.py34
1 files changed, 14 insertions, 20 deletions
diff --git a/unscrambler.py b/unscrambler.py
index 9df82f6..c5bc9b5 100644
--- a/unscrambler.py
+++ b/unscrambler.py
@@ -128,14 +128,12 @@ class Unscrambler(object):
# 52 bits
@staticmethod
- def _compute_word_fingerprint(word: str, population: Mapping[str, int]) -> int:
+ def _compute_word_fingerprint(population: Mapping[str, int]) -> int:
fp = 0
for pair in sorted(population.items(), key=lambda x: x[1], reverse=True):
letter = pair[0]
if letter in fprint_feature_bit:
- count = pair[1]
- if count > 3:
- count = 3
+ count = min(pair[1], 3)
shift = fprint_feature_bit[letter]
s = count << shift
fp |= s
@@ -144,25 +142,23 @@ class Unscrambler(object):
# 32 bits
@staticmethod
def _compute_word_letter_sig(
- letter_sigs: Mapping[str, int],
+ lsigs: Mapping[str, int],
word: str,
population: Mapping[str, int],
) -> int:
sig = 0
for pair in sorted(population.items(), key=lambda x: x[1], reverse=True):
letter = pair[0]
- if letter not in letter_sigs:
+ if letter not in lsigs:
continue
- s = letter_sigs[letter]
+ s = lsigs[letter]
count = pair[1]
if count > 1:
s <<= count
s |= count
s &= letters_mask
sig ^= s
- length = len(word)
- if length > 31:
- length = 31
+ length = min(len(word), 31)
sig ^= length << 8
sig &= letters_mask
return sig
@@ -189,7 +185,7 @@ class Unscrambler(object):
"""
population = list_utils.population_counts(word)
- fprint = Unscrambler._compute_word_fingerprint(word, population)
+ fprint = Unscrambler._compute_word_fingerprint(population)
letter_sig = Unscrambler._compute_word_letter_sig(letter_sigs, word, population)
assert fprint & letter_sig == 0
sig = fprint | letter_sig
@@ -197,7 +193,7 @@ class Unscrambler(object):
@staticmethod
def repopulate(
- letter_sigs: Dict[str, int],
+ lsigs: Dict[str, int],
dictfile: str = '/usr/share/dict/words',
indexfile: str = '/usr/share/dict/sparse_index',
) -> None:
@@ -211,13 +207,13 @@ class Unscrambler(object):
for word in f:
word = word.replace('\n', '')
word = word.lower()
- sig = Unscrambler.compute_word_sig(letter_sigs, word)
- logger.debug("%s => 0x%x" % (word, sig))
+ sig = Unscrambler.compute_word_sig(word)
+ logger.debug("%s => 0x%x", word, sig)
if word in seen:
continue
seen.add(word)
if sig in words_by_sigs:
- words_by_sigs[sig] += ",%s" % word
+ words_by_sigs[sig] += f",{word}"
else:
words_by_sigs[sig] = word
with open(indexfile, 'w') as f:
@@ -252,13 +248,11 @@ class Unscrambler(object):
"""
ret = {}
- (exact, location) = list_utils.binary_search(self.sigs, sig)
+ (_, location) = list_utils.binary_search(self.sigs, sig)
start = location - window_size
- if start < 0:
- start = 0
+ start = max(start, 0)
end = location + 1 + window_size
- if end > len(self.words):
- end = len(self.words)
+ end = min(end, len(self.words))
for x in range(start, end):
word = self.words[x]