Files
ratewords/rankwords.py
2022-01-13 22:03:13 -05:00

164 lines
3.0 KiB
Python

#! /usr/bin/python3
import re
from string import ascii_lowercase
letterscore = {
"s": 26,
"e": 25,
"a": 24,
"o": 23,
"r": 22,
"i": 21,
"l": 20,
"t": 19,
"n": 18,
"u": 17,
"d": 16,
"c": 15,
"y": 14,
"p": 13,
"m": 12,
"h": 11,
"g": 10,
"b": 9,
"k": 8,
"f": 7,
"w": 6,
"v": 5,
"z": 4,
"x": 3,
"j": 2,
"q": 1,
}
def trimWordList(toRemove, words):
for word in toRemove:
try:
words.pop(word)
except(KeyError):
pass
def rankWord(word, words):
score = sum(letterscore.get(letter, 0) for letter in word.lower())
multiplier=len(set(word))
words[word] = score*multiplier
return score*multiplier
def rankLetters(words):
lettercount = {
"\n": 0
}
for word in words:
for letter in word:
if letter in lettercount.keys():
lettercount[letter]=lettercount[letter]+1
else:
lettercount[letter]=1
sort_letters = sorted(lettercount.items(), key=lambda x: x[1])
for key in letterscore:
letterscore[key] = 0
rank=0
for i in sort_letters:
letterscore[i[0]] = rank
rank+=1
def matchKnown(mask, words):
toRemove = [word for word in words if not re.search(mask, word)]
(words.remove(word) for word in toRemove)
def removeExcluded(mask, words):
toRemove = []
for word in words:
for letter in mask:
if re.search(letter, word):
toRemove.append(word)
trimWordList(toRemove, words)
def matchIncluded(mask, words):
toRemove = []
for word in words:
for letter in mask:
if not re.search(letter, word):
toRemove.append(word)
trimWordList(toRemove, words)
def removeMask(masks, words):
toRemove = []
for word in words:
index=0
for letter in word:
for excluded in masks[index]:
if letter == excluded:
toRemove.append(word)
index+=1
trimWordList(toRemove, words)
def countDistinct(str):
s = set(str)
return len(s)
def loadWords(file, words):
with open(file) as f:
for line in f:
words[line.rstrip()]=0;
def parseMask(mask, masks):
index=0
for letter in mask:
if letter != ".":
masks[index].append(letter)
index+=1
else:
index+=1
if __name__ == "__main__":
import sys
words = {}
loadWords(sys.argv[1], words)
masks=[]
maskList=[[]]
for index in range(0,len(next(iter(words)))-1):
new=[]
maskList.append(new)
matchKnown(sys.argv[2], words)
removeExcluded(sys.argv[4], words)
matchIncluded(sys.argv[3], words)
for index in range(5, len(sys.argv)):
masks.append(sys.argv[index])
for mask in masks:
parseMask(mask, maskList)
removeMask(maskList, words)
rankLetters(words)
for word in words:
words[word] = rankWord(word, words)
for word in words:
print(str(words[word]) + " " + word)