開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考 (Srini Devadas (著)、黒川 利明 (翻訳)、オライリージャパン)の17章(アナグラム狂)、練習問題(問題3)の解答を求めてみる。
コード
Python 3
#!/usr/bin/env python3 def anagrams(corpus: list) -> dict: ''' >>> anagrams(['ate', 'but', 'eat', 'tub', 'tea']) {('a', 'e', 't'): ['ate', 'eat', 'tea'], ('b', 't', 'u'): ['but', 'tub']} ''' anagram_dict = {} for word in corpus: t = tuple(sorted(word)) anagram_dict.setdefault(t, []) anagram_dict[tuple(sorted(word))].append(word) return anagram_dict if __name__ == '__main__': import doctest doctest.testmod() corpus = ['ate', 'but', 'eat', 'tub', 'abed', 'mace', 'acre', 'abut', 'mean', 'bade', 'abet', 'care', 'tabu', 'bead', 'beat', 'race', 'acme', 'beta', 'came'] for word in anagrams(corpus).values(): print(word) for words in anagrams(corpus).values(): for word in words: print(word)
入出力結果(Terminal, cmd(コマンドプロンプト), Jupyter(IPython))
$ ./sample3.py -v Trying: anagrams(['ate', 'but', 'eat', 'tub', 'tea']) Expecting: {('a', 'e', 't'): ['ate', 'eat', 'tea'], ('b', 't', 'u'): ['but', 'tub']} ok 1 items had no tests: __main__ 1 items passed all tests: 1 tests in __main__.anagrams 1 tests in 2 items. 1 passed and 0 failed. Test passed. ['ate', 'eat'] ['but', 'tub'] ['abed', 'bade', 'bead'] ['mace', 'acme', 'came'] ['acre', 'care', 'race'] ['abut', 'tabu'] ['mean'] ['abet', 'beat', 'beta'] ate eat but tub abed bade bead mace acme came acre care race abut tabu mean abet beat beta $
0 コメント:
コメントを投稿