開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考 (Srini Devadas (著)、黒川 利明 (翻訳)、オライリージャパン)の20章(6次の隔たり)、練習問題(問題1)の解答を求めてみる。
コード
Python 3
#!/usr/bin/env python3 def degrees_of_pair(graph: dict, start: str, end: str) -> int: ''' >>> degrees_of_pair(small, 'c', 'b') 1 >>> degrees_of_pair(small, 'c', 'd') 2 ''' if start not in graph: return -1 visited = {start} frontier = {start} degress = 0 while frontier: degress += 1 new_frontier = set() for g in frontier: if end in graph[g]: return degress s = set(graph[g]) - visited visited |= s new_frontier |= s frontier = new_frontier return degress - 1 def degrees(graph: dict) -> int: ''' >>> degrees(small) 3 ''' degrees = max([degrees_of_pair(graph, k1, k2) for k1 in graph for k2 in graph if k1 < k2]) return degrees if __name__ == '__main__': import doctest small = {'a': ['b', 'c'], 'b': ['a', 'c', 'd'], 'c': ['a', 'b', 'e'], 'd': ['b', 'e'], 'e': ['c', 'd', 'f'], 'f': ['e']} globs = globals() globs.update({'small': small}) doctest.testmod(globs=globs)
入出力結果(cmd(コマンドプロンプト)、Terminal、Jupyter(IPython))
C:\Users\...>py -3 sample1.py -v Trying: degrees(small) Expecting: 3 ok Trying: degrees_of_pair(small, 'c', 'b') Expecting: 1 ok Trying: degrees_of_pair(small, 'c', 'd') Expecting: 2 ok 1 items had no tests: __main__ 2 items passed all tests: 1 tests in __main__.degrees 2 tests in __main__.degrees_of_pair 3 tests in 3 items. 3 passed and 0 failed. Test passed. C:\Users\...>
0 コメント:
コメントを投稿