edited strings/anagram.py (#5770)

* rewrote anagrams.py, added doctests

* corrected mistakes

* add anagrams.txt

* Update anagrams.py

* Update strings/anagrams.py

Co-authored-by: Christian Clauss <cclauss@me.com>

Co-authored-by: Christian Clauss <cclauss@me.com>
This commit is contained in:
Leoriem-code 2021-11-08 18:58:15 +01:00 committed by GitHub
parent a8aeabdf18
commit 4c9949f636
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33989 additions and 23 deletions

View File

@ -1,35 +1,44 @@
from __future__ import annotations
import collections
import os
import pprint
import time
start_time = time.time()
print("creating word list...")
path = os.path.split(os.path.realpath(__file__))
with open(path[0] + "/words.txt") as f:
word_list = sorted(list({word.strip().lower() for word in f}))
from pathlib import Path
def signature(word):
def signature(word: str) -> str:
"""Return a word sorted
>>> signature("test")
'estt'
>>> signature("this is a test")
' aehiisssttt'
>>> signature("finaltest")
'aefilnstt'
"""
return "".join(sorted(word))
def anagram(my_word: str) -> list[str]:
"""Return every anagram of the given word
>>> anagram('test')
['sett', 'stet', 'test']
>>> anagram('this is a test')
[]
>>> anagram('final')
['final']
"""
return word_bysig[signature(my_word)]
data: str = Path(__file__).parent.joinpath("words.txt").read_text(encoding="utf-8")
word_list = sorted({word.strip().lower() for word in data.splitlines()})
word_bysig = collections.defaultdict(list)
for word in word_list:
word_bysig[signature(word)].append(word)
if __name__ == "__main__":
all_anagrams = {word: anagram(word) for word in word_list if len(anagram(word)) > 1}
def anagram(my_word):
return word_bysig[signature(my_word)]
print("finding anagrams...")
all_anagrams = {word: anagram(word) for word in word_list if len(anagram(word)) > 1}
print("writing anagrams to file...")
with open("anagrams.txt", "w") as file:
file.write("all_anagrams = ")
with open("anagrams.txt", "w") as file:
file.write("all_anagrams = \n ")
file.write(pprint.pformat(all_anagrams))
total_time = round(time.time() - start_time, 2)
print(("Done [", total_time, "seconds ]"))

33957
strings/anagrams.txt Normal file

File diff suppressed because it is too large Load Diff