From: Skullheadx <94652084+Skullheadx@users.noreply.github.com> Date: Mon, 21 Nov 2022 23:51:33 +0000 (-0500) Subject: non vowel substrings now pruned X-Git-Url: http://git.skullheadx.com/index.js?a=commitdiff_plain;h=bb0084b38c818928e2a14320740162e7f8bd7027;p=word-hunt.git non vowel substrings now pruned --- diff --git a/Main/data.py b/Main/data.py index 4181144..2bad0ea 100644 --- a/Main/data.py +++ b/Main/data.py @@ -9,6 +9,8 @@ vowels = "aeiouy" # y for special case like rhythm print("Strange Data about english words") +print(f'Longest Word is "{max(word_list,key=len)}" and has length {len(max(word_list,key=len))}.') + letter_frequency = {letter: 0 for letter in alphabet} for word in word_list: for letter in word: diff --git a/Main/puzzle_generator.py b/Main/puzzle_generator.py index a78249e..7cdfdbf 100644 --- a/Main/puzzle_generator.py +++ b/Main/puzzle_generator.py @@ -1,4 +1,4 @@ -from random import choice +from random import choices from queue import Queue from string import ascii_lowercase import json @@ -7,6 +7,7 @@ length, width = 4, 4 with open("pruned_words.json", 'r') as f: word_list = json.load(f) alphabet = ascii_lowercase +vowels = "aeiouy" weights = [8.464812190575197, 1.8290213382006486, 4.377463842181293, 3.238497204031964, 10.77374340292079, 1.1220794892410257, 2.3639146242995768, 2.64283880414943, 8.95783107183879, 0.15584834882323761, 0.7667338050095298, 5.577710795267362, 3.009862381185312, 7.195528282969081, 7.200021981915867, @@ -25,7 +26,22 @@ class Tile: tx, ty = x + i, y + j if (0 <= tx < width) and (0 <= ty < length): self.neighbors.add((tx, ty)) - +def non_vowel_substr(w): + vowel_indexes = [] + for i, l in enumerate(w): + if l in vowels: + vowel_indexes.append(i) + longest_substr = 0 + prev = -1 + for v in vowel_indexes: + c = v - prev + if c > longest_substr: + longest_substr = c + prev = v + c = len(w) - prev + if c > longest_substr: + longest_substr = c + return longest_substr - 1 def find_words(b): words = set() @@ -43,6 +59,9 @@ def find_words(b): if len(word) >= length * width: break + if non_vowel_substr(word) > 7: + continue + if word in word_list: words.add(word) @@ -50,8 +69,8 @@ def find_words(b): q.put((word + b[i].letter, i, seen.copy())) return words - -board = {(i, j): Tile(i, j, choice(alphabet)) for i in range(width) for j in range(length)} +letters = choices(alphabet, weights=weights, k=16) +board = {(i, j): Tile(i, j, letters[j * width + i]) for i in range(width) for j in range(length)} for i, val in enumerate(board.values()): print(val.letter, end=" ") @@ -64,3 +83,16 @@ print(find_words(board)) # r a m u # t f k g # {'haku', 'aku', 'trah', 'toma', 'fam', 'gud', 'frt', 'amdt', 'kadu', 'aft', 'rad', 'adam', 'tao', 'arf', 'fax', 'art', 'max', 'rat', 'adat', 'oda', 'dao', 'tod', 'tax', 'taku', 'mat', 'kudo', 'rha', 'omar', 'dar', 'douma', 'haft', 'moat', 'fram', 'dum', 'odum', 'rah', 'doug', 'moa', 'chat', 'xat', 'udo', 'dart', 'fado', 'kaf', 'mota', 'mud', 'dug', 'trad', 'odax', 'tom', 'cham', 'amu', 'xcl', 'udom', 'kam', 'raku', 'tar', 'toad', 'hld', 'tou', 'rada', 'mot', 'arx', 'trf', 'mad', 'mudar', 'mart', 'toa', 'mxd', 'maku', 'duo', 'cha', 'mado', 'toda', 'doum', 'mfr', 'tra', 'haf', 'oat', 'chart', 'dat', 'rax', 'dom', 'doat', 'adar', 'gum', 'dak', 'dato', 'ada', 'chad', 'adm', 'duka', 'marx', 'fart', 'chaft', 'mug', 'hat', 'ham', 'dumka', 'tad', 'ram', 'kat', 'tfr', 'kart', 'tram', 'oud', 'hcl', 'dam', 'ado', 'daft', 'dot', 'mah', 'duma', 'moud', 'raft', 'mar', 'dah', 'atom', 'far', 'mou', 'tam', 'hart', 'tahr', 'frat', 'hak', 'adatom', 'fra', 'char', 'toug', 'had', 'oad', 'fad', 'fat', 'doa', 'mod'} + +# m v w h +# p t o t +# m c g w +# m z x j +# {'tpm', 'pmt', 'tgt', 'hot', 'cot', 'mcg', 'tog', 'gov', 'govt', 'how', 'cpt', 'hog', 'tov', 'two', 'wot', 'cog', 'ctg', 'wowt', 'owt', 'gtc', 'thow', 'got', 'cow', 'coth', 'wog', 'vow', 'cpm', 'wow', 'vogt', 'voc', 'oct', 'hoc', 'tow', 'goth', 'mtg', 'tho', 'thowt', 'ptg', 'togt', 'who', 'cto', 'hwt', 'pct', 'pcm', 'otc', 'pvt', 'tot', 'vog'} + +# x e r s +# e m i m +# r a e t +# r t h r +# {'rea', 'tae', 'ameers', 'mare', 'thetis', 'ear', 'ate', 'mems', 'ermit', 'mat', 'retiree', 'tire', 'that', 'thairm', 'thais', 'trema', 'smite', 'aimer', 'team', 'erie', 'remit', 'erth', 'ers', 'reim', 'smither', 'tetramer', 'rie', 'mit', 'mrs', 'aer', 'tamers', 'harm', 'err', 'retia', 'rim', 'mather', 'retame', 'eimer', 'xema', 'theat', 'rems', 'reis', 'hae', 'emeer', 'rithe', 'smith', 'treat', 'ria', 'mem', 'tiar', 'reiter', 'tree', 'eme', 'smiter', 'rime', 'emit', 'mtier', 'smeath', 'trame', 'haire', 'amerism', 'mee', 'mima', 'ram', 'tertia', 'site', 'mah', 'reit', 'marree', 'ramie', 'hamite', 'irma', 'tram', 'siam', 'thema', 'harr', 'ramism', 'aims', 'meath', 'hair', 'their', 'threat', 'hems', 'amie', 'simar', 'erat', 'mae', 'haremism', 'retar', 'riem', 'rate', 'mer', 'emirs', 'harre', 'meriah', 'metae', 'meathe', 'retire', 'hare', 'rater', 'ham', 'armit', 'rier', 'ream', 'sire', 'hear', 'meith', 'tie', 'remi', 'rame', 'ahet', 'smeth', 'armers', 'miter', 'tmema', 'emeers', 'mate', 'reamers', 'aire', 'theta', 'tear', 'tar', 'rah', 'timers', 'hater', 'mear', 'aimers', 'tra', 'mitre', 'sie', 'arter', 'emir', 'mime', 'hate', 'heme', 'sier', 'simarre', 'arte', 'theism', 'meriter', 'either', 'erme', 'retare', 'rhema', 'art', 'smit', 'eemis', 'tame', 'heir', 'aimee', 'timer', 'mite', 'rei', 'aet', 'siree', 'ither', 'thai', 'harmers', 'iter', 'rehair', 'amirs', 'sit', 'themis', 'mairs', 'theme', 'reh', 'tahr', 'tiam', 'ter', 'metamer', 'smear', 'tarmi', 'iare', 'mis', 'miae', 'meat', 'hame', 'tiers', 'tetramers', 'armer', 'meth', 'heirs', 'aith', 'mir', 'tim', 'eam', 'ems', 'rha', 'rath', 'met', 'tetramerism', 'arm', 'amit', 'are', 'metreme', 'amex', 'theatre', 'items', 'eth', 'eerier', 'hami', 'ramee', 'hei', 'tea', 'mair', 'rearm', 'metier', 'amire', 'haems', 'sim', 'rima', 'rear', 'mirs', 'remex', 'mire', 'armet', 'rat', 'tier', 'metre', 'mirex', 'metra', 'rims', 'eat', 'erma', 'tamer', 'tema', 'xeme', 'heart', 'mismetre', 'mither', 'tirma', 'eath', 'hert', 'hemera', 'sith', 'exert', 'reemit', 'sirex', 'ame', 'amis', 'sime', 'hart', 'harem', 'mimers', 'retie', 'eris', 'item', 'mart', 'amrit', 'rms', 'emerit', 'teart', 'tait', 'teamer', 'sia', 'etiam', 'time', 'airs', 'mar', 'eer', 'eria', 'thae', 'rhea', 'tharm', 'thea', 'smitham', 'mia', 'hat', 'tremex', 'maimer', 'mehtar', 'hem', 'mim', 'the', 'hairs', 'hareem', 'trah', 'teaer', 'timar', 'eir', 'rite', 'metis', 'irs', 'tamis', 'ahems', 'rem', 'sri', 'ameer', 'mimer', 'emetia', 'timet', 'emim', 'rte', 'ree', 'rais', 'ret', 'hait', 'arthemis', 'tret', 'rimate', 'rare', 'ait', 'ramex', 'retrait', 'tis', 'tem', 'merism', 'amir', 'ami', 'rimer', 'haem', 'eater', 'them', 'meta', 'aht', 'rhet', 'retime', 'mater', 'heat', 'rathe', 'rhe', 'sithe', 'atheism', 'het', 'merit', 'her', 'tare', 'rheme', 'sir', 'itea', 'mismet', 'maitre', 'ire', 'reharm', 'artemis', 'meer', 'rather', 'ahem', 'rit', 'earth', 'remaim', 'merat', 'tai', 'mrem', 'teth', 'metiers', 'tha', 'reem', 'ais', 'tarr', 'era', 'math', 'ima', 'mermis', 'retree', 'eire', 'exeat', 'metamers', 'ramet', 'mathe', 'trait', 'ism', 'rheae', 'remet', 'retier', 'harmer', 'teaism', 'haet', 'tremie', 'maim', 'tetra', 'reamer', 'emer', 'themer', 'imer', 'eerie', 'eta', 'theirs', 'rti', 'rex', 'teat', 'maire', 'tam', 'mea', 'tarre', 'aim', 'arr', 'air', 'thar', 'rami', 'thairms', 'sima', 'maims'} +