| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- #!/usr/bin/env python3
- import sys
- from collections import deque
- reqs = {}
- for line in sys.stdin:
- a, b = line[5:37:31]
- reqs.setdefault(b, set()).add(a)
- reqs.setdefault(a, set())
- # part 1
- worklist = deque()
- remain = set(reqs)
- while remain:
- nxt = min(k for k in remain if not reqs[k] & remain)
- remain.remove(nxt)
- worklist.append(nxt)
- print(''.join(worklist))
- # part 2
- working = []
- completed = set()
- tick = -1
- while worklist:
- tick += 1
- completed |= set(task for task, rem in working if rem == 1)
- working = [(task, rem - 1) for task, rem in working if rem > 1]
- while len(working) < 5:
- for task in worklist:
- if not reqs[task] - completed:
- worklist.remove(task)
- working.append((task, ord(task) - 4))
- break
- else:
- break
- print(tick + max(rem for task, rem in working))
|