開発環境
- macOS Mojave - Apple
- Emacs (Text Editor)
- Python 3.7 (プログラミング言語)
問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考 (Srini Devadas (著)、黒川 利明 (翻訳)、オライリージャパン)の2章(パーティーに行くタイミング)、練習問題(パズル問題3)を取り組んでみる。
コード(Emacs)
Python 3
#!/usr/bin/env python3 ''' パズル問題3 ''' def best_time_to_party_smart(schedule: list): ''' >>> sched0 = [] >>> sched1 = [(7, 8, 1)] >>> sched2 = [(7, 8, 1), (6, 10, 1), (6.5, 7.5, 1), (8.5, 9, 3)] >>> sched3 = [(6, 8, 2), (6.5, 12, 1), (6.5, 7, 2), (7, 8, 2), ... (7.5, 10, 3), (8, 9, 2), (8, 10, 1), (9, 12, 2), ... (9.5, 10, 4), (10, 11, 2), (10, 12, 3), (11, 12, 7)] >>> best_time_to_party_smart(sched0) >>> best_time_to_party_smart(sched1) (7, 1) >>> best_time_to_party_smart(sched2) (8.5, 4) >>> best_time_to_party_smart(sched3) (11, 13) ''' if not schedule: return None time, _, max_weight = schedule[0] for i, (start, _, weight) in enumerate(schedule): for start1, end1, weight1 in schedule[:i] + schedule[i+1:]: if start1 <= start < end1: weight += weight1 if weight > max_weight: max_weight = weight time = start return time, max_weight if __name__ == '__main__': import doctest doctest.testmod()
入出力結果(Terminal, Jupyter(IPython))
$ ./sample3.py -v Trying: sched0 = [] Expecting nothing ok Trying: sched1 = [(7, 8, 1)] Expecting nothing ok Trying: sched2 = [(7, 8, 1), (6, 10, 1), (6.5, 7.5, 1), (8.5, 9, 3)] Expecting nothing ok Trying: sched3 = [(6, 8, 2), (6.5, 12, 1), (6.5, 7, 2), (7, 8, 2), (7.5, 10, 3), (8, 9, 2), (8, 10, 1), (9, 12, 2), (9.5, 10, 4), (10, 11, 2), (10, 12, 3), (11, 12, 7)] Expecting nothing ok Trying: best_time_to_party_smart(sched0) Expecting nothing ok Trying: best_time_to_party_smart(sched1) Expecting: (7, 1) ok Trying: best_time_to_party_smart(sched2) Expecting: (8.5, 4) ok Trying: best_time_to_party_smart(sched3) Expecting: (11, 13) ok 1 items had no tests: __main__ 1 items passed all tests: 8 tests in __main__.best_time_to_party_smart 8 tests in 2 items. 8 passed and 0 failed. Test passed. $ pylint sample3.py ************* Module sample3 sample3.py:13:40: C0303: Trailing whitespace (trailing-whitespace) sample3.py:21:7: C1801: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition) sample3.py:5:0: R1710: Either all return statements in a function should return an expression, or none of them should. (inconsistent-return-statements) sample3.py:24:19: W0612: Unused variable 'end' (unused-variable) ----------------------------------- Your code has been rated at 7.33/10 $ pylint sample3.py ------------------------------------------------------------------- Your code has been rated at 10.00/10 (previous run: 7.33/10, +2.67) $
0 コメント:
コメントを投稿