import collections import itertools happiness = collections.defaultdict(int) people = set() for line in df.read_text().splitlines(): A, verb, N, B = re.findall(r'([A-Z][a-z]+|gain|lose|\d+)', line) happiness[A, B] = int(N) if verb == 'gain' else -int(N) people.update({A, B}) def calc(seq): return sum(happiness[b, a] + happiness[b, c] for a, b, c in zip(seq[-1:] + seq[:-1], seq, seq[1:] + seq[:1]) ) ans1 = max(calc(combo) for combo in itertools.permutations(people)) ans2 = max(calc(combo) for combo in itertools.permutations(people | {'me'}))