1
0

main.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import os, sys
  2. task_dir = os.path.dirname(__file__)
  3. sys.path.append(f"{task_dir}/..")
  4. from get_tasks import get_input, check_example, generate_readme
  5. def solve(input: list[str]) -> tuple[int, int]:
  6. braces = {")": "(", "}": "{", "]": "[", ">": "<"}
  7. reverse_braces = {"(": ")", "{": "}", "[": "]", "<": ">"}
  8. illegal_points = {")": 3, "}": 1197, "]": 57, ">": 25137}
  9. completion_points = {")": 1, "}": 3, "]": 2, ">": 4}
  10. scores = []
  11. sum = 0
  12. for line in input:
  13. score = 0
  14. stack = []
  15. not_corrapted = True
  16. for char in line.strip():
  17. if char in braces.values():
  18. stack.append(char)
  19. else:
  20. if braces[char] == stack[-1]:
  21. stack.pop()
  22. else:
  23. sum += illegal_points[char]
  24. not_corrapted = False
  25. break
  26. if not_corrapted:
  27. while stack:
  28. score = score * 5 + completion_points[reverse_braces[stack.pop()]]
  29. scores.append(score)
  30. print("The anwer of part1 is:", sum)
  31. print("The anser of part2 is:", sorted(scores)[int(len(scores) / 2)])
  32. return sum, sorted(scores)[int(len(scores) / 2)]
  33. if __name__ == "__main__":
  34. input, example = get_input(task_dir, 10)
  35. check_example(example, solve)
  36. solve(input)
  37. generate_readme(task_dir, 10)