| 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]) |