05_ingredients.py 788 B

123456789101112131415161718192021222324252627
  1. #!/usr/bin/env python3
  2. import sys
  3. def parse_ranges(f):
  4. for line in f:
  5. if line == '\n':
  6. break
  7. yield tuple(map(int, line.split('-')))
  8. def merge(ranges):
  9. sorted_ranges = sorted(ranges)
  10. merged = [sorted_ranges[0]]
  11. for start, end in sorted_ranges[1:]:
  12. last_start, last_end = merged[-1]
  13. if start <= last_end:
  14. merged[-1] = last_start, max(last_end, end)
  15. else:
  16. merged.append((start, end))
  17. return merged
  18. def any_contains(ranges, number):
  19. return any(start <= number <= end for start, end in ranges)
  20. fresh = merge(parse_ranges(sys.stdin))
  21. inventory = map(int, sys.stdin)
  22. print(sum(any_contains(fresh, ingredient) for ingredient in inventory))
  23. print(sum(end - start + 1 for start, end in fresh))