Advertisement
Syldarion

AdventOfCode'22-Day3

Dec 3rd, 2022 (edited)
452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.49 KB | None | 0 0
  1. def letter_value(letter):
  2.     ord_value = ord(letter)
  3.     if 65 <= ord_value <= 90:
  4.         return ord_value - 38
  5.     elif 97 <= ord_value <= 122:
  6.         return ord_value - 96
  7.     else:
  8.         return -1
  9.  
  10.  
  11. def part1(*args):
  12.     rucksacks = []
  13.  
  14.     with open(args[0], "r") as f:
  15.         for line in f.readlines():
  16.             line_strip = line.strip()
  17.             line_len = len(line_strip)
  18.             rucksacks.append((line_strip[:line_len//2], line_strip[line_len//2:]))
  19.  
  20.     rucksack_sum = 0
  21.     for rucksack in rucksacks:
  22.         compartment_intersection = set(rucksack[0]).intersection(set(rucksack[1]))
  23.         final_letter = compartment_intersection.pop()
  24.  
  25.         value = letter_value(final_letter)
  26.  
  27.         rucksack_sum += value
  28.  
  29.     print(rucksack_sum)
  30.  
  31.  
  32. def part2(*args):
  33.     rucksack_groups = []
  34.  
  35.     with open(args[0], "r") as f:
  36.         lines = [x.strip() for x in f.readlines()]
  37.         index = 0
  38.  
  39.         while index < len(lines):
  40.             rucksack_groups.append((
  41.                 lines[index],
  42.                 lines[index + 1],
  43.                 lines[index + 2]
  44.             ))
  45.             index += 3
  46.  
  47.     rucksack_sum = 0
  48.  
  49.     for group in rucksack_groups:
  50.         elf_a = set(group[0])
  51.         elf_b = set(group[1])
  52.         elf_c = set(group[2])
  53.         common = elf_a.intersection(elf_b.intersection(elf_c))
  54.         final_letter = common.pop()
  55.         value = letter_value(final_letter)
  56.         rucksack_sum += value
  57.  
  58.     print(rucksack_sum)
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement