day3.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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().splitlines()
  5. with open(os.path.join(os.path.dirname(__file__), "input.txt")) as example:
  6. input_data = example.read().splitlines()
  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. def part1(data=input_data):
  15. sum = 0
  16. for battery in data:
  17. jolts = [int(d) for d in battery]
  18. d = max(jolts)
  19. md = str(d)
  20. i = jolts.index(d)
  21. left, right = jolts[:i], jolts[i + 1 :]
  22. lmd = str(max(left)) if left != [] else ""
  23. rmd = str(max(right)) if right != [] else ""
  24. sum += int(lmd + md) if int(lmd + md) > int(md + rmd) else int(md + rmd)
  25. print(f"Part 1: {sum=}")
  26. # can be used for part 1 with number_digits=2
  27. def part2(data=input_data, number_digits=2):
  28. sum = 0
  29. for battery in data:
  30. jolts = [int(d) for d in battery]
  31. numind = []
  32. window_ind = len(jolts) + 1 - number_digits
  33. ind = 0
  34. for _ in range(number_digits):
  35. win = jolts[ind:window_ind]
  36. max_value = max(win)
  37. max_ind = win.index(max_value)
  38. numind.append(max_value)
  39. ind += max_ind + 1
  40. window_ind = window_ind + 1
  41. sum += int("".join([str(d) for d in numind]))
  42. print(f"Part 2: {sum=}")
  43. part1(example_data)
  44. part1(input_data)
  45. part2(example_data, 12)
  46. part2(input_data, 12)