day2.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import os
  2. import time
  3. with open(os.path.join(os.path.dirname(__file__), "example.txt")) as example:
  4. example_data = example.read()
  5. with open(os.path.join(os.path.dirname(__file__), "input.txt")) as example:
  6. input_data = example.read()
  7. def bench(part):
  8. def wrapper(*args, **kwargs):
  9. start = time.perf_counter()
  10. value = part(*args, **kwargs)
  11. print(f"\tevaluation time: {time.perf_counter() - start} s")
  12. return value
  13. return wrapper
  14. @bench
  15. def part1(data=input_data):
  16. sum = 0
  17. for indentifier in data.split(","):
  18. first, second = map(int, indentifier.split("-"))
  19. for number in range(first, second + 1):
  20. number = str(number)
  21. if len(number) % 2 == 0:
  22. left, right = number[: len(number) // 2], number[len(number) // 2 :]
  23. if left == right:
  24. sum += int(number)
  25. print(f"Part 1: {sum=}")
  26. @bench
  27. def part2(data=input_data):
  28. sum = 0
  29. for indentifier in data.split(","):
  30. first, second = map(int, indentifier.split("-"))
  31. for number in range(first, second + 1):
  32. number = str(number)
  33. for l in range(1, len(number) + 1):
  34. if len(number) % l == 0 and (z := len(number) // (l)) != 1 and (number.count(number[:l])) == z:
  35. sum += int(number)
  36. break
  37. print(f"Part 2: {sum=}")
  38. part1(example_data)
  39. part1(input_data)
  40. print()
  41. part2(example_data)
  42. part2(input_data)