diff options
| -rw-r--r-- | 22.11/part2.py | 58 | 
1 files changed, 58 insertions, 0 deletions
| diff --git a/22.11/part2.py b/22.11/part2.py new file mode 100644 index 0000000..08821fd --- /dev/null +++ b/22.11/part2.py @@ -0,0 +1,58 @@ +from functools import reduce + +items = [] +ops = [] +decide = [] +points = [] +tests = [] + +# garbage parser because i fucking hate this day already +def readMonke(): +	input() +	items.append([int(s) for s in input()[18:].split(', ')]) + +	op_l = input()[23:] +	op = op_l[0] +	arg = None +	self = op_l[2:] == "old" +	if not self: +		arg = int(op_l[2:]) + +	if self and op == "*": +		ops.append(lambda x: x * x) +	elif not self and op == "*": +		ops.append(lambda x: x * arg) +	elif not self and op == "+": +		ops.append(lambda x: x + arg) +	else: +		raise "fuck shit piss" + +	test = int(input()[21:]) +	tests.append(test) + +	onTrue = int(input()[29:]) +	onFalse = int(input()[30:]) +	decide.append(lambda x: onTrue if x % test == 0 else onFalse) +	points.append(0) + +while True: +	readMonke() +	try: input() +	except EOFError: break + +lcm = reduce(lambda a,b:a*b, tests) # all prime numbers, no lcm on town + +def doRound(): +	for monkey in range(len(items)): +		points[monkey] += len(items[monkey]) +		for item in items[monkey]: +			item = ops[monkey](item) % lcm +			items[decide[monkey](item)].append(item) +		items[monkey] = [] + + +for _ in range(10000): +	doRound() + +a, b = sorted(points)[-2:] +print(a * b) | 
