-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathday13.py
53 lines (40 loc) · 1.46 KB
/
day13.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from collections import defaultdict
from itertools import permutations
def parse_input(filename: str) -> dict:
rules = defaultdict(dict)
lines = [line.strip() for line in open(filename).readlines()]
for line in lines:
parts = line.split(' ')
person1 = parts[0]
person2 = parts[10][:-1]
happiness = int(parts[3]) if parts[2] == 'gain' else -int(parts[3])
rules[person1][person2] = happiness
return rules
def calculate_happines(rules: dict) -> int:
people = rules.keys()
arrangements = permutations(people)
max_happiness = 0
for arrangement in arrangements:
happiness = 0
for i in range(len(arrangement) - 1):
happiness += rules[arrangement[i]][arrangement[i + 1]]
happiness += rules[arrangement[i + 1]][arrangement[i]]
happiness += rules[arrangement[-1]][arrangement[0]]
happiness += rules[arrangement[0]][arrangement[-1]]
max_happiness = max(max_happiness, happiness)
return max_happiness
def part1(rules: dict) -> int:
return calculate_happines(rules)
def part2(rules: dict) -> int:
people = list(rules.keys())
for person in people:
rules[person]['me'] = 0
for person in people:
rules['me'][person] = 0
return calculate_happines(rules)
def main():
rules = parse_input('input/day13.txt')
print(f'Part 1: {part1(rules)}')
print(f'Part 2: {part2(rules)}')
if __name__ == "__main__":
main()