07_workers.py 894 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #!/usr/bin/env python3
  2. import sys
  3. from collections import deque
  4. reqs = {}
  5. for line in sys.stdin:
  6. a, b = line[5:37:31]
  7. reqs.setdefault(b, set()).add(a)
  8. reqs.setdefault(a, set())
  9. # part 1
  10. worklist = deque()
  11. remain = set(reqs)
  12. while remain:
  13. nxt = min(k for k in remain if not reqs[k] & remain)
  14. remain.remove(nxt)
  15. worklist.append(nxt)
  16. print(''.join(worklist))
  17. # part 2
  18. working = []
  19. completed = set()
  20. tick = -1
  21. while worklist:
  22. tick += 1
  23. completed |= set(task for task, rem in working if rem == 1)
  24. working = [(task, rem - 1) for task, rem in working if rem > 1]
  25. while len(working) < 5:
  26. for task in worklist:
  27. if not reqs[task] - completed:
  28. worklist.remove(task)
  29. working.append((task, ord(task) - 4))
  30. break
  31. else:
  32. break
  33. print(tick + max(rem for task, rem in working))