Ejemplo n.º 1
0
def part2():
    pgm = Program(real)
    pgm.pgm[0] = 2
    instructions = (
        "A,B,A,C,C,A,B,C,B,B\n",
        "L,8,R,10,L,8,R,8\n",
        "L,12,R,8,R,8\n",
        "L,8,R,6,R,6,R,10,L,8\n",
        "n\n"
    )
    for c in ''.join(instructions):
        pgm.push(ord(c))
    pgm.run()
    d = pgm.dump()
    if TRACE:
        print( Maze(d[:-1]).string )
    return d[-1]
Ejemplo n.º 2
0
def run( base, blacks, whites ):
    pgm = Program(real)
    loc = base
    facing = 0
    pgm.start()

    while pgm.is_alive():
        pgm.push( 1 if loc in whites else 0 )
        color = pgm.pop()
        newdir = pgm.pop()
        if TRACE:
            print( color, newdir )
        if color:
            whites.add( loc )
            blacks.discard( loc )
        else:
            blacks.add( loc )
            whites.discard( loc )
        facing = (facing+[1,3][newdir]) % 4
        loc += directions[facing]
        if TRACE:
            print( loc )
    pgm.join()
Ejemplo n.º 3
0
def inside(x, y):
    pgm = Program(real)
    pgm.push(x)
    pgm.push(y)
    pgm.run()
    return pgm.pop()
Ejemplo n.º 4
0
    1005, 224, 629, 1001, 223, 1, 223, 8, 226, 226, 224, 1002, 223, 2, 223,
    1005, 224, 644, 1001, 223, 1, 223, 1107, 677, 677, 224, 1002, 223, 2, 223,
    1005, 224, 659, 1001, 223, 1, 223, 1007, 677, 677, 224, 1002, 223, 2, 223,
    1005, 224, 674, 101, 1, 223, 223, 4, 223, 99, 226
]

TRACE = 'trace' in sys.argv
TESTS = 'test' in sys.argv

if TESTS:
    for p in test:
        print(p)
        for i in (1, 5, 12):
            print("Trying", i)
            pgm = Program(p)
            pgm.push(i)
            pgm.push(i)
            pgm.push(i)
            pgm.run()
            if pgm.output.empty():
                print("HALT empty")
            else:
                print(pgm.pop())

    pgm = Program(t2)
    pgm.push(1)
    pgm.run()
    print(pgm.pop())

# For part 1, enter 1.  For part 2, enter 5.