def simul_amplifiers(code, phases): signal = 0 for p in phases: sim = Simulator(code, inp=[p, signal]) sim.run() signal = sim.output()[0] return signal
def partTwo(code): robot = Simulator(code) position = (0, 0) direction = (0, 1) # UP panels = {position: 1} while not robot.finished: robot.add_input([panels.get(position, 0)]) robot.run(until=Operation.OUTPUT) robot.run(until=Operation.OUTPUT) color, turn = robot.output()[-2:] panels[position] = color if turn == 0: direction = turn_left(direction) elif turn == 1: direction = turn_right(direction) else: raise RuntimeError(f"Unknown turn {turn}") position = (position[0] + direction[0], position[1] + direction[1]) minx = min(p[0] for p in panels.keys()) maxx = max(p[0] for p in panels.keys()) miny = min(p[1] for p in panels.keys()) maxy = max(p[1] for p in panels.keys()) # Somehow, the letters were upside-down for me. Maybe change the ranges if it does not display nicely. for y in range(maxy, miny - 1, -1): for x in range(minx, maxx + 1): color = panels.get((x, y), 0) if color == 0: print(' ', end='') else: print('X', end='') print('\n', end='')
def get_preview(code, start=(0, 0), size=50): start_x, start_y = start tractor = dict() for x in range(start_x, start_x+size): for y in range(start_y, start_y+size): sim = Simulator(code) sim.add_input([x, y]) sim.run() tractor[x, y] = sim.output()[0] return tractor
def partOne(code): robot = Simulator(code) position = (0, 0) direction = (0, 1) # UP panels = dict() while not robot.finished: robot.add_input([panels.get(position, 0)]) robot.run(until=Operation.OUTPUT) robot.run(until=Operation.OUTPUT) color, turn = robot.output()[-2:] panels[position] = color if turn == 0: direction = turn_left(direction) elif turn == 1: direction = turn_right(direction) else: raise RuntimeError(f"Unknown turn {turn}") position = (position[0] + direction[0], position[1] + direction[1]) return len(panels)
def partOne(code): simulator = Simulator(code, inp=[1]) simulator.run() test_run = simulator.output() assert len(test_run) == 1, test_run return test_run[0]
def partTwo(code): simulator = Simulator(code, inp=[2]) simulator.run() real_run = simulator.output() assert len(real_run) == 1, real_run return real_run[0]
def partOne(code): inp = int(input("Ship's air conditioner ID: ")) simulator = Simulator(code, inp=[inp]) simulator.run() return ",".join(str(i) for i in simulator.output())
def partTwo(code): inp = int(input("Ship's thermal radiator ID: ")) simulator = Simulator(code, inp=[inp]) simulator.run() return ",".join(str(i) for i in simulator.output())