TheAlgorithms-Python
44 строки · 1.1 Кб
1from __future__ import annotations
2
3import collections
4import pprint
5from pathlib import Path
6
7
8def signature(word: str) -> str:
9"""Return a word sorted
10>>> signature("test")
11'estt'
12>>> signature("this is a test")
13' aehiisssttt'
14>>> signature("finaltest")
15'aefilnstt'
16"""
17return "".join(sorted(word))
18
19
20def anagram(my_word: str) -> list[str]:
21"""Return every anagram of the given word
22>>> anagram('test')
23['sett', 'stet', 'test']
24>>> anagram('this is a test')
25[]
26>>> anagram('final')
27['final']
28"""
29return word_by_signature[signature(my_word)]
30
31
32data: str = Path(__file__).parent.joinpath("words.txt").read_text(encoding="utf-8")
33word_list = sorted({word.strip().lower() for word in data.splitlines()})
34
35word_by_signature = collections.defaultdict(list)
36for word in word_list:
37word_by_signature[signature(word)].append(word)
38
39if __name__ == "__main__":
40all_anagrams = {word: anagram(word) for word in word_list if len(anagram(word)) > 1}
41
42with open("anagrams.txt", "w") as file:
43file.write("all_anagrams = \n ")
44file.write(pprint.pformat(all_anagrams))
45