b.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import os, argparse
  2. def solve_task(backpacks):
  3. group_size = 3
  4. sum_of_priorities = 0
  5. # Run once per group
  6. for group_number in range(len(backpacks)//group_size):
  7. group_backpacks = backpacks[group_number * group_size : (group_number + 1)*group_size]
  8. # Special treatment for the first backpack
  9. items_sieve = get_unique_items(group_backpacks[0])
  10. # For the remaining packs..
  11. for backpack in group_backpacks[1:]:
  12. for item in list(items_sieve.keys()):
  13. if item not in backpack:
  14. items_sieve.pop(item)
  15. # Simple error check
  16. if len(items_sieve) != 1:
  17. print("This is so wrong!")
  18. quit()
  19. # Add the sole remaining item to the results
  20. sum_of_priorities += get_priority(next(iter(items_sieve)))
  21. print(sum_of_priorities)
  22. def get_unique_items(line):
  23. uniques = {}
  24. for c in line:
  25. uniques[c] = 1
  26. #return [k for k in uniques.keys()]
  27. return uniques
  28. def get_priority(item):
  29. item_code = ord(item)
  30. if item >= 'a':
  31. return item_code - ord('a') + 1
  32. else:
  33. return item_code - ord('A') + 27
  34. def read_lines(filename):
  35. lines = []
  36. with open(filename) as infile:
  37. for raw_line in infile:
  38. line = raw_line.rstrip()
  39. lines.append(line)
  40. return lines
  41. def parse_arguments():
  42. parser = argparse.ArgumentParser(description="Script that solves the case",epilog="Have a nice day!")
  43. parser.add_argument('filename', nargs='?', default="example.txt", help='Input file')
  44. args = parser.parse_args()
  45. return args
  46. def main():
  47. args = parse_arguments()
  48. lines = read_lines(args.filename)
  49. solve_task(lines)
  50. if __name__ == "__main__":
  51. main()