-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday13.py
executable file
·48 lines (35 loc) · 1.04 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
#!/usr/bin/env python3
import itertools
import re
import sys
filename = ("test.txt" if sys.argv[1] == "-t" else sys.argv[1]) if len(sys.argv) > 1 else "input.txt"
happiness = {}
names = set()
for line in open(filename):
m = re.match(r"(.+) would (gain|lose) (\d+) happiness units by sitting next to (.+)\.$", line)
if not m:
exit()
name1 = m.group(1)
name2 = m.group(4)
delta = int(m.group(3))
if m.group(2) == "lose":
delta = -delta
happiness[(name1, name2)] = delta
names.add(name1)
names.add(name2)
def solve():
happiness_max = 0
for x in itertools.permutations(names):
happiness_sum = 0
for i in range(len(x)):
happiness_sum += happiness[(x[i], x[(i + 1) % len(x)])]
happiness_sum += happiness[(x[(i + 1) % len(x)], x[i])]
if happiness_sum > happiness_max:
happiness_max = happiness_sum
print(happiness_max)
solve()
for name in names:
happiness[(name, "me")] = 0
happiness[("me", name)] = 0
names.add("me")
solve()