def load(filename): with open(filename) as f: for l in f: s = l.rstrip() n = len(s) offset = int(n/2) c1 = s[0:offset] c2 = s[offset:] yield c1, c2 def overlap(c1, c2): return list(set(c1).intersection(set(c2)))[0] def priority(c): n = ord(c) if ord("a") <= n <= ord("z"): return n - ord("a") + 1 if ord("A") <= n <= ord("Z"): return n - ord("A") + 27 raise Exception() def calcsum(l): l = [overlap(*x) for x in l] t = sum([priority(*x) for x in l]) return t l = list(load("demo.txt")) assert "".join(l[0]) == "vJrwpWtwJgWrhcsFMMfFFhFp" assert l[0][0] == "vJrwpWtwJgWr" assert l[0][1] == "hcsFMMfFFhFp" assert overlap(*l[0]) == "p" assert l[1] == ("jqHRNqRjqzjGDLGL", "rsFMfFZSrLrFZsSL") assert overlap(*l[1]) == "L" assert l[2] == ("PmmdzqPrV", "vPwwTWBwg") assert overlap(*l[2]) == "P" assert overlap(*l[3]) == "v" assert overlap(*l[4]) == "t" assert overlap(*l[5]) == "s" assert priority("a") == 1 assert priority("z") == 26 assert priority("A") == 27 assert priority("Z") == 52 assert calcsum(l) == 157 l = load("data.txt") print("Sum is:", calcsum(l))