| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import os, argparse
- def solve_task(backpacks):
- group_size = 3
- sum_of_priorities = 0
- # Run once per group
- for group_number in range(len(backpacks)//group_size):
- group_backpacks = backpacks[group_number * group_size : (group_number + 1)*group_size]
- # Special treatment for the first backpack
- items_sieve = get_unique_items(group_backpacks[0])
- # For the remaining packs..
- for backpack in group_backpacks[1:]:
- for item in list(items_sieve.keys()):
- if item not in backpack:
- items_sieve.pop(item)
-
- # Simple error check
- if len(items_sieve) != 1:
- print("This is so wrong!")
- quit()
-
- # Add the sole remaining item to the results
- sum_of_priorities += get_priority(next(iter(items_sieve)))
- print(sum_of_priorities)
- def get_unique_items(line):
- uniques = {}
- for c in line:
- uniques[c] = 1
- #return [k for k in uniques.keys()]
- return uniques
- def get_priority(item):
- item_code = ord(item)
- if item >= 'a':
- return item_code - ord('a') + 1
- else:
- return item_code - ord('A') + 27
- def read_lines(filename):
- lines = []
- with open(filename) as infile:
- for raw_line in infile:
- line = raw_line.rstrip()
- lines.append(line)
- return lines
- def parse_arguments():
- parser = argparse.ArgumentParser(description="Script that solves the case",epilog="Have a nice day!")
- parser.add_argument('filename', nargs='?', default="example.txt", help='Input file')
- args = parser.parse_args()
- return args
- def main():
- args = parse_arguments()
- lines = read_lines(args.filename)
- solve_task(lines)
- if __name__ == "__main__":
- main()
|