def interpret(string, globals): | def interpret(string, globals): | ||||
fn, *args = ( | fn, *args = ( | ||||
x if x.replace('_', '').isalpha() else eval(x) | |||||
x if x[0].isalpha() else eval(x) | |||||
for x in string.split() | for x in string.split() | ||||
) | ) | ||||
globals[fn](**dict(zip(*[iter(args)] * 2))) | globals[fn](**dict(zip(*[iter(args)] * 2))) | ||||
def loop_consume(lines, handler): | |||||
instructions = collections.deque(lines) | |||||
count = 0 | |||||
while instructions: | |||||
ok = handler(instructions[0]) | |||||
if ok: | |||||
instructions.popleft() | |||||
count = 0 | |||||
elif count < len(instructions): | |||||
instructions.rotate(1) | |||||
count += 1 | |||||
else: | |||||
raise RuntimeError('Reached steady state') |
text = sys.stdin.read().strip() | text = sys.stdin.read().strip() | ||||
# ans1 = unzip_len(text) | |||||
# print(ans1) | |||||
ans1 = unzip_len(text) | |||||
print(ans1) | |||||
ans2 = unzip_len(text, recurse=True) | ans2 = unzip_len(text, recurse=True) | ||||
print(ans2) | print(ans2) |
import collections | |||||
import sys | |||||
import toolkit | |||||
def handle(string): | |||||
if string.startswith('value'): | |||||
_, value, _, _, t0, i0 = string.split() | |||||
regs[t0 + i0].append(int(value)) | |||||
return True | |||||
elif string.startswith('bot'): | |||||
t0, i0, _, _, _, t1, i1, _, _, _, t2, i2 = string.split() | |||||
try: | |||||
lo, hi = sorted(regs[t0 + i0]) | |||||
except ValueError: | |||||
return False | |||||
regs[t1 + i1].append(lo) | |||||
regs[t2 + i2].append(hi) | |||||
return True | |||||
regs = collections.defaultdict(list) | |||||
toolkit.loop_consume(sys.stdin.read().splitlines(), handle) | |||||
print(next(k for k, v in regs.items() if set(v) == {17, 61})) | |||||
print(regs['output0'][0] * regs['output1'][0] * regs['output2'][0]) |