solution.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/usr/bin/python3
  2. import sys
  3. import re
  4. # part 1
  5. def contained(starts, ends):
  6. return (starts[0] <= starts[1] and ends[0] >= ends[1]) or (starts[1] <= starts[0] and ends[1] >= ends[0])
  7. def part1():
  8. total = 0
  9. for line in sys.stdin:
  10. groups = re.match(r'^([0-9]+)-([0-9]+),([0-9]+)-([0-9]+)$', line.strip()).groups()
  11. starts = (int(groups[0]), int(groups[2]))
  12. ends = (int(groups[1]), int(groups[3]))
  13. total += 1 if contained(starts, ends) else 0
  14. print(f'{total} pairs have a range that fully contains the other')
  15. # part 2
  16. def overlap(starts, ends):
  17. return (starts[0] <= starts[1] and ends[0] >= starts[1]) or (starts[1] <= starts[0] and ends[1] >= starts[0])
  18. def part2():
  19. total = 0
  20. for line in sys.stdin:
  21. groups = re.match(r'^([0-9]+)-([0-9]+),([0-9]+)-([0-9]+)$', line.strip()).groups()
  22. starts = (int(groups[0]), int(groups[2]))
  23. ends = (int(groups[1]), int(groups[3]))
  24. total += 1 if overlap(starts, ends) else 0
  25. print(f'{total} pairs have overlap')
  26. if sys.argv[1] in '1':
  27. part1()
  28. else:
  29. part2()