選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

35 行
831B

  1. import collections
  2. import sys
  3. text = sys.stdin.read()
  4. text = text.replace('bags', 'bag')
  5. reverse = collections.defaultdict(list)
  6. bags = collections.defaultdict(list)
  7. for line in text.splitlines():
  8. source, targets = line.split('contain')
  9. source = source.strip()
  10. for target in targets.strip('.').split(','):
  11. n, stuff = target.strip().split(' ', 1)
  12. n = int('0' if n == 'no' else n)
  13. reverse[stuff.strip()].append(source)
  14. bags[source].append((n, stuff))
  15. edge = {'shiny gold bag'}
  16. seen = set()
  17. while edge:
  18. edge = {new for old in edge for new in reverse[old]} - seen
  19. seen |= edge
  20. print(len(seen))
  21. edge = [(1, 'shiny gold bag')]
  22. seen = []
  23. while edge:
  24. edge = [(n * m, name) for n, sub in edge for m, name in bags[sub] if n * m]
  25. seen += edge
  26. print(sum(n for n, _ in seen))