66
77
88def signature (word : str ) -> str :
9- """
10- Return a word's frequency-based signature.
9+ """Return a frequency-based signature for a given word.
1110
1211 >>> signature("test")
1312 'e1s1t2'
@@ -23,14 +22,13 @@ def signature(word: str) -> str:
2322
2423
2524def anagram (my_word : str ) -> list [str ]:
26- """
27- Return every anagram of the given word from the dictionary.
25+ """Return all anagrams of the given word found in the dictionary.
2826
29- >>> anagram(' test' )
27+ >>> anagram(" test" )
3028 ['sett', 'stet', 'test']
31- >>> anagram(' this is a test' )
29+ >>> anagram(" this is a test" )
3230 []
33- >>> anagram(' final' )
31+ >>> anagram(" final" )
3432 ['final']
3533 """
3634 return word_by_signature [signature (my_word )]
@@ -39,13 +37,16 @@ def anagram(my_word: str) -> list[str]:
3937data : str = Path (__file__ ).parent .joinpath ("words.txt" ).read_text (encoding = "utf-8" )
4038word_list = sorted ({word .strip ().lower () for word in data .splitlines ()})
4139
42- word_by_signature = collections .defaultdict (list )
40+ word_by_signature : dict [ str , list [ str ]] = collections .defaultdict (list )
4341for word in word_list :
4442 word_by_signature [signature (word )].append (word )
4543
44+
4645if __name__ == "__main__" :
47- all_anagrams = {word : anagram (word ) for word in word_list if len (anagram (word )) > 1 }
46+ all_anagrams = {
47+ word : anagram (word ) for word in word_list if len (anagram (word )) > 1
48+ }
4849
49- with open ("anagrams.txt" , "w" ) as file :
50+ with open ("anagrams.txt" , "w" , encoding = "utf-8" ) as file :
5051 file .write ("all_anagrams = \n " )
5152 file .write (pprint .pformat (all_anagrams ))
0 commit comments