def run(data): c = Computer.fromstring(data) c.run() layout, robot = parse_output(c.output) # print_board(layout) part_a = sum( r * c for r in range(1, len(layout) - 1) for c in range(1, len(layout[0]) - 1) if { layout[r][c], layout[r + 1][c], layout[r - 1][c], layout[r][c - 1], layout[r][c + 1] } == {'#'}) move_str = walk_scaffold(layout, robot) # Emprically determined sub_a = 'R,10,R,8,L,10,L,10' sub_b = 'R,8,L,6,L,6' sub_c = 'L,10,R,10,L,6' main = move_str.replace(sub_a, 'A').replace(sub_b, 'B').replace(sub_c, 'C') c = Computer.fromstring(data) c.memory[0] = 2 c.run(main + '\n' + sub_a + '\n' + sub_b + '\n' + sub_c + '\nn\n') # c.display_ascii() return part_a, c.output[-1]
def run(data): c = Computer.fromstring(data) c.run() part_a = sum(1 for *_, t in grouper(c.output, 3) if t == 2) c = Computer.fromstring(data) return part_a, play_game(c)
def run(data): c = Computer.fromstring(data) c.run([1]) part_a = c.output[0] c = Computer.fromstring(data) c.run([2]) part_b = c.output[0] return part_a, part_b
def run(data): scripts = [ """NOT A J NOT B T OR T J NOT C T OR T J AND D J WALK""", """NOT J J AND C J AND B J AND A J NOT J J OR H T OR E T AND D T AND T J RUN""" ] parts = [] for s in scripts: c = Computer.fromstring(data) c.run(s + '\n') #c.display_ascii() parts.append(c.output[-1]) return parts
def run(data): c = Computer.fromstring(data) # arbitrary starting point really, just denotes a location in the grid start = Point(22, 20) layout, goal = find_layout(c, start) path = astar(start, goal, layout) return path.cost, fill(goal, layout)
def run_network(source): network = {} network[255] = NAT(network) for i in range(50): c = Computer.fromstring(source) network[i] = c c.send_input([i]) comps = itertools.cycle(network.values()) while comp := next(comps): inp = [-1] if not comp.input_data else None if comp.run(inp): break while comp.output: addr = comp.output.pop(0) x = comp.output.pop(0) y = comp.output.pop(0) network[addr].send_input((x, y))
def run(data): c = Computer.fromstring(data) walk(c) return solve(c),