1
0

day5.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import os
  2. with open(os.path.join(os.path.dirname(__file__), "example.txt")) as example:
  3. example_data = example.read().splitlines()
  4. with open(os.path.join(os.path.dirname(__file__), "input.txt")) as example:
  5. input_data = example.read().splitlines()
  6. def parse_data(data):
  7. ranges = []
  8. ing_ids = []
  9. for range in data:
  10. if "-" in range:
  11. start, end = map(int, range.split("-"))
  12. ranges.append((start, end))
  13. elif range == "":
  14. continue
  15. else:
  16. ing_ids.append(int(range))
  17. return ranges, ing_ids
  18. def part1(data):
  19. ranges, ing_ids = parse_data(data)
  20. sum = 0
  21. for ing_id in ing_ids:
  22. for start, end in ranges:
  23. if start <= ing_id <= end:
  24. sum += 1
  25. break
  26. print(f"Part 1: {sum=}")
  27. def part2(data):
  28. ranges, _ = parse_data(data)
  29. ranges.sort()
  30. merged = []
  31. current_start, current_end = ranges[0]
  32. for start, end in ranges[1:]:
  33. if start <= current_end:
  34. current_end = max(current_end, end)
  35. else:
  36. merged.append((current_start, current_end))
  37. current_start, current_end = start, end
  38. merged.append((current_start, current_end))
  39. sum = 0
  40. for start, end in merged:
  41. sum += end - start + 1
  42. print(f"Part 2: {sum=}")
  43. part1(example_data)
  44. part1(input_data)
  45. part2(example_data)
  46. part2(input_data)