## 2018年11月11日日曜日

### Algorithm - Python - パーティーに行くタイミング(時間の粒度に依存しない方法、入れ子forループ)

コード(Emacs)

Python 3

```#!/usr/bin/env python3
''' 問題2 '''

def best_time_to_party_smart(schedule: list) -> float:
'''
>>> sched = [(6, 8), (6, 12), (6, 7), (7, 8), (7, 10), (8, 9), (8, 10),
...          (9, 12), (9, 10), (10, 11), (10, 12), (11, 12)]
>>> sched2 = [(6.0, 8.0), (6.5, 12.0), (6.5, 7.0), (7.0, 8.0), (7.5, 10.0),
...           (8.0, 9.0), (8.0, 10.0), (9.0, 12.0), (9.5, 10.0),
...           (10.0, 11.0), (10.0, 12.0), (11.0, 12.0)]
>>> best_time_to_party_smart(sched)
(9, 5)
>>> best_time_to_party_smart(sched2)
(9.5, 5)
'''
time = schedule[0][0]
maxcount = 1
for i, (start, _) in enumerate(schedule):
count = 1
for start1, end1 in schedule[:i] + schedule[i + 1:]:
if start1 <= start < end1:
count += 1
if count > maxcount:
time = start
maxcount = count
return time, maxcount

if __name__ == '__main__':
import doctest
doctest.testmod()
```

```\$ ./sample2.py
\$ ./sample2.py -v
(9, 5)
(9.5, 5)
Trying:
sched = [(6, 8), (6, 12), (6, 7), (7, 8), (7, 10), (8, 9), (8, 10),
(9, 12), (9, 10), (10, 11), (10, 12), (11, 12)]
Expecting nothing
ok
Trying:
sched2 = [(6.0, 8.0), (6.5, 12.0), (6.5, 7.0), (7.0, 8.0), (7.5, 10.0),
(8.0, 9.0), (8.0, 10.0), (9.0, 12.0), (9.5, 10.0),
(10.0, 11.0), (10.0, 12.0), (11.0, 12.0)]
Expecting nothing
ok
Trying:
best_time_to_party_smart(sched)
Expecting:
(9, 5)
ok
Trying:
best_time_to_party_smart(sched2)
Expecting:
(9.5, 5)
ok
__main__
1 items passed all tests:
4 tests in __main__.best_time_to_party_smart
4 tests in 2 items.
4 passed and 0 failed.
Test passed.
\$ pylint sample2.py
************* Module sample2
sample2.py:11:59: C0303: Trailing whitespace (trailing-whitespace)

------------------------------------------------------------------
Your code has been rated at 9.33/10

\$ pylint sample2.py

-------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 9.33/10, +0.67)

\$
```