You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
758 B
39 lines
758 B
import aoclib |
|
|
|
|
|
inp = aoclib.get_input(3, parser=aoclib.parse_lines_with_type_and_default( |
|
typ=lambda l: (l[: len(l)//2], l[len(l)//2:]), default=None)) |
|
|
|
|
|
def letter_value(x: str): |
|
if x.isupper(): |
|
return ord(x) - 38 |
|
else: |
|
return ord(x) - 96 |
|
|
|
|
|
def part1(): |
|
total = 0 |
|
for one, two in inp: |
|
both = set(one).intersection(set(two)) |
|
for thing in both: |
|
total += letter_value(thing) |
|
|
|
return total |
|
|
|
|
|
def part2(): |
|
a = inp |
|
a = [x + y for x, y in a] |
|
|
|
total = 0 |
|
|
|
for i in range(0, len(a), 3): |
|
common = set(a[i]).intersection(set(a[i+1])).intersection(set(a[i+2])) |
|
for thing in common: |
|
total += letter_value(thing) |
|
|
|
return total |
|
|
|
|
|
aoclib.main(part1, part2)
|
|
|