void-stranger-tools/brute-force-word.py
2024-08-25 20:39:11 +03:00

86 lines
1.7 KiB
Python

import re
words = []
with open("english-words.txt", "r") as f:
for line in f.readlines():
line = line.strip()
if not line.isalpha(): continue
words.append(line)
def find_word_by_letters(letters):
pattern = ""
for possibilities in letters:
if len(possibilities) == 0:
pattern += "."
elif len(possibilities) == 0:
pattern += possibilities[0]
else:
pattern += "["
pattern += "".join(possibilities)
pattern += "]"
compiled_pattern = re.compile("^" + pattern + "$")
found_words = []
for word in words:
if compiled_pattern.match(word.upper()):
found_words.append(word)
return found_words
letters = [
["P"],
["L"],
[],
["K", "I", "C", "A"],
["Z", "O", "N", "K", "J"],
["O", "M", "G", "E"],
["Z", "Y", "X", "W", "V", "U", "T", "S", "R", "Q", "P"],
["Y", "U", "Q", "M", "I", "E"],
["E"],
["D"]
]
banned_words = [
"zeed",
"PL",
"PLA",
"PLT",
"PLP",
"plf",
"PLC",
"plu",
"PLR",
"pltano",
"ed",
"MED",
"yed",
"QED",
"PLD",
"Ppli",
"ply",
"PLL",
"PLM",
"pli",
"PLO",
"PLS",
"PLCC",
"SED",
"CED"
]
for split_index in range(1, len(letters)-1):
possible_words1 = find_word_by_letters(letters[:split_index])
if len(possible_words1) == 0: continue
possible_words2 = find_word_by_letters(letters[split_index:])
if len(possible_words2) == 0: continue
for word1 in possible_words1:
if word1 in banned_words: continue
for word2 in possible_words2:
if word2 in banned_words: continue
print(f"{word1} {word2}")