Пример #1
0
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]
Пример #2
0
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)
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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)
Пример #6
0
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))
Пример #7
0
def run(data):
    c = Computer.fromstring(data)
    walk(c)
    return solve(c),