81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
input = open("input", 'r')
|
|
# input = open("sample", 'r')
|
|
data = []
|
|
total = 0
|
|
|
|
for line in input:
|
|
data.append(line.strip())
|
|
|
|
divisor = 1
|
|
monkeys = []
|
|
for line in data:
|
|
if len(line) <= 0:
|
|
continue
|
|
if line[0] == "M":
|
|
monkeys.append({})
|
|
else:
|
|
if line[0] == "S":
|
|
text, items = line.split(": ")
|
|
monkeys[-1]["items"] = [int(item) for item in items.split(", ")]
|
|
elif line[0] == "O":
|
|
formula = line.split("old ")[1]
|
|
op = "+" if formula[0] == "+" else "*"
|
|
num = formula[2:]
|
|
monkeys[-1]["opp"] = (op, num)
|
|
elif line[0] == "T":
|
|
monkeys[-1]["test"] = int(line.split("divisible by ")[1])
|
|
divisor *= monkeys[-1]["test"]
|
|
elif line[3] == "t":
|
|
monkeys[-1]["true"] = int(line.split("monkey ")[1])
|
|
elif line[3] == "f":
|
|
monkeys[-1]["false"] = int(line.split("monkey ")[1])
|
|
|
|
# inspects = [0 for _ in range(len(monkeys))]
|
|
# for r in range(20):
|
|
# # round
|
|
# for m, monkey in enumerate(monkeys):
|
|
# length = len(monkey["items"])
|
|
# inspects[m] += length
|
|
# for i in range(length):
|
|
# item = monkey["items"][0]
|
|
# del monkey["items"][0]
|
|
# value = int(monkey["opp"][1]) if monkey["opp"][1] != "old" else item
|
|
# if monkey["opp"][0] == "*":
|
|
# item = item * value
|
|
# elif monkey["opp"][0] == "+":
|
|
# item = item + value
|
|
|
|
# item = item // 3
|
|
|
|
# if item % monkey["test"] == 0:
|
|
# monkeys[monkey["true"]]["items"].append(item)
|
|
# else:
|
|
# monkeys[monkey["false"]]["items"].append(item)
|
|
|
|
# isorted = sorted(inspects, reverse=True)
|
|
# print(isorted[0] * isorted[1])
|
|
|
|
inspects = [0 for _ in range(len(monkeys))]
|
|
for r in range(10000):
|
|
# round
|
|
for m, monkey in enumerate(monkeys):
|
|
length = len(monkey["items"])
|
|
inspects[m] += length
|
|
for i in range(length):
|
|
item = monkey["items"][0]
|
|
del monkey["items"][0]
|
|
value = int(monkey["opp"][1]) if monkey["opp"][1] != "old" else item
|
|
if monkey["opp"][0] == "*":
|
|
item = item * value
|
|
elif monkey["opp"][0] == "+":
|
|
item = item + value
|
|
|
|
item = item % divisor
|
|
|
|
if item % monkey["test"] == 0:
|
|
monkeys[monkey["true"]]["items"].append(item)
|
|
else:
|
|
monkeys[monkey["false"]]["items"].append(item)
|
|
|
|
isorted = sorted(inspects, reverse=True)
|
|
print(isorted[0] * isorted[1])
|