2018年11月12日月曜日

開発環境

問題解決の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 コメント:

コメントを投稿