generated from alvesvaren/AoC-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path21.py
More file actions
80 lines (68 loc) · 2.37 KB
/
21.py
File metadata and controls
80 lines (68 loc) · 2.37 KB
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import sympy
class Monkey:
def __init__(self, name, val, operation, a, b):
self.name = name
self.val = val
self.operation = operation
self.a = a
self.b = b
monkeys = []
for monkey in open("21.txt"):
if(len(monkey.split(" ")) == 4):
mon = Monkey(monkey.split(" ")[0].strip(":"), None, monkey.split(" ")[2], monkey.split(" ")[1], monkey.split(" ")[3].strip())
monkeys.append(mon)
else:
mon = Monkey(monkey.split(" ")[0].strip(":"), int(monkey.split(" ")[1]), None, None, None)
monkeys.append(mon)
vals = {}
root_idx = 0
for idx, monkey in enumerate(monkeys):
if monkey.name == "root":
root_idx = idx
if monkey.a == None:
vals[monkey.name] = monkey.val
for monkey in monkeys:
if monkey.name in vals:
continue
if monkey.a not in vals or monkey.b not in vals:
monkeys.append(monkey)
else:
match monkey.operation:
case "+":
vals[monkey.name] = vals[monkey.a] + vals[monkey.b]
case "-":
vals[monkey.name] = vals[monkey.a] - vals[monkey.b]
case "*":
vals[monkey.name] = vals[monkey.a] * vals[monkey.b]
case "/":
vals[monkey.name] = vals[monkey.a] / vals[monkey.b]
case _:
print("Operation error!")
print(vals["root"])
vals = { "humn": sympy.Symbol("x") }
root_idx = 0
for idx, monkey in enumerate(monkeys):
if monkey.name == "root":
root_idx = idx
if monkey.a == None and monkey.name != "humn":
vals[monkey.name] = sympy.Integer(monkey.val)
for monkey in monkeys:
if monkey.name in vals:
continue
if monkey.a not in vals or monkey.b not in vals:
monkeys.append(monkey)
else:
if monkey.name == "root":
print(sympy.solve(vals[monkey.a] - vals[monkey.b]))
break
match monkey.operation:
case "+":
vals[monkey.name] = vals[monkey.a] + vals[monkey.b]
case "-":
vals[monkey.name] = vals[monkey.a] - vals[monkey.b]
case "*":
vals[monkey.name] = vals[monkey.a] * vals[monkey.b]
case "/":
vals[monkey.name] = vals[monkey.a] / vals[monkey.b]
case _:
print("Operation error!")