day15.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import os
  2. import re
  3. from collections import defaultdict
  4. from contextlib import suppress
  5. with open(os.path.join(os.path.dirname(__file__), "example.txt")) as example:
  6. example_data = example.read().split(",")
  7. with open(os.path.join(os.path.dirname(__file__), "input.txt")) as example:
  8. input_data = example.read().split(",")
  9. def HASH(string):
  10. current = 0
  11. for letter in string:
  12. current += ord(letter)
  13. current *= 17
  14. current %= 256
  15. return current
  16. def solve1(data):
  17. s = 0
  18. for string in data:
  19. s += HASH(string)
  20. print(s)
  21. return s
  22. def solve2(data):
  23. s = 0
  24. boxes = defaultdict(dict)
  25. for label in data:
  26. label, focal_lens = re.match(r"(^\w+).(\d+)?", label).groups()
  27. if focal_lens is not None:
  28. boxes[HASH(label)][label] = int(focal_lens)
  29. else:
  30. with suppress(KeyError):
  31. del boxes[HASH(label)][label]
  32. for box, labels in boxes.items():
  33. for ind, (label, fl) in enumerate(labels.items(), 1):
  34. s += (box + 1) * ind * fl
  35. print(s)
  36. return s
  37. solve1(example_data)
  38. solve1(input_data)
  39. solve2(example_data)
  40. solve2(input_data)