Re: Advent of Code
▼2022#11, Python 3.8.10
import copy, math, operator, re
monkeys = []
for line in open("input.txt").readlines():
line = line.strip()
if line.startswith("Monkey"):
monkeys.append([])
continue
if line.startswith("Start"):
monkeys[-1].append(list(map(int, re.findall("\d+", line))))
continue
if line.startswith(("Test", "If")):
monkeys[-1].append(int(re.search(r"\d+", line).group()))
continue
if line == "":
continue
monkeys[-1].append(line.split("= old ")[-1].split(" "))
ops = {
"+": operator.add,
"-": operator.sub,
"*": operator.mul,
"/": operator.truediv,
}
def operation(old, new):
op, val = new
val = old if val == "old" else int(val)
return ops[op](old, val)
def inspecting(isridiculous: bool = True):
inspectors = copy.deepcopy(monkeys)
activities = [0] * len(inspectors)
magic = math.prod([inspector[2] for inspector in inspectors]) if isridiculous else 3
for _ in range(10_000 if isridiculous else 20):
for m, (worries, new, isdiv, yeah, nope) in enumerate(inspectors):
if len(worries) == 0:
continue
activities[m] += len(worries)
for worry in worries:
worry = operation(worry, new)
worry = worry % magic if isridiculous else worry // magic
inspectors[nope if worry % isdiv else yeah][0].append(worry)
inspectors[m][0] = []
activities = sorted(activities)
print(activities[-1] * activities[-2])
inspecting(False) # Part One: 56120
inspecting() # Part Two: 24389045529