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]
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()
def inside(x, y): pgm = Program(real) pgm.push(x) pgm.push(y) pgm.run() return pgm.pop()
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.