Esempio n. 1
0
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
Esempio n. 2
0
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='')
Esempio n. 3
0
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
Esempio n. 4
0
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)
Esempio n. 5
0
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]
Esempio n. 6
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]
Esempio n. 7
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())
Esempio n. 8
0
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())