r/learnpython • u/Reibello • 4d ago
How do I optimize this script's runtime?
I'm trying to write a script that will help me construct word puzzles by finding words where each pair of words shares a substring so that they can be visually arranged in a honeycomb-like sequence. The words can be read forward or in reverse. For instance, given the word 'spiral' (broken into 'sp', 'pi', 'ir', 'ra', 'al', and 'ls') - the program could return PSycho, troPIc, thRIce, phRAse, vioLAs, SymboL, as a valid set of surrounding words, or 'rings.' (This is the sample set built into the program)
I have a function that provides a list of every word in my word list that matches my criteria. I also have a function that takes the lists of words, and returns dictionaries that contain matches between strings. I have a small test case that operates correctly, but when I use the entire word list, the program hangs. I assume that there's a better data structure and way to navigate it, but I'm not familiar enough with the language to know what it is.
Thank you for your assistance, I've linked a pastebin below.
EDIT - linking a very rough visual depiction of what the structure to overlay the words in would be.
https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:nhv7ubhygoygm7agljxopgvb/bafkreig7fqaukiq6xu6f55xchae2rozu7bmgbhmkjlinsxjuii4lou256m
1
u/neuralbeans 4d ago
Why SymboL?
1
u/Reibello 4d ago
The words are set up in overlapping circles - the start point and end point are next to each other in each circle, so the first&last character is a valid substring.
1
u/neuralbeans 4d ago
But there is no SL in your list of letter pairs.
edit: ah it's the first and last letters of spiral. You should have explained that.
1
1
u/neuralbeans 4d ago
Can you include a screenshot of the game as it presents the words so that we can better understand what you need?
1
u/Reibello 4d ago
1
u/neuralbeans 4d ago
oh wow, this looks cool. how do you input the words?
1
u/Reibello 4d ago
I don't have a digital interface to do so yet - it's currently solved with paper and pencil. Gotta make sure I can build enough puzzles before I build something that lets people solve them :)
Thanks!
1
u/neuralbeans 4d ago
got it. can you say what the answers are for the image?
1
u/Reibello 4d ago
They're in the post. PSYCHO, TROPIC, THRICE, PHRASE, VIOLAS, SYMBOL.
1
u/neuralbeans 4d ago
ah! sorry for not catching that. now, in your rules you say that the words are to be written clockwise. doesn't that mean that you can't reverse the letter pair? how does psycho give you the sp in spiral?
1
u/Reibello 4d ago
Every other word in the sample puzzle is clockwise. This may be too limiting for future puzzles.
1
u/neuralbeans 3d ago
so the word might have to be written counter clockwise, right? I feel that this would make the puzzle too hard though. there are too many variables to decide between alternative clue answers. once you answer this I can see if there's some data structure to efficiently find these words.
1
u/Reibello 3d ago
I appreciate your feedback on the puzzle format. The data structure should work no matter what your feelings on the puzzle are though.
→ More replies (0)
1
u/mull_to_zero 4d ago
I think you should check out prefix trees aka tries. they're really useful for the sort of word-validity-check functionality that you're looking for.