def main(codes): memory = {i: v for i, v in enumerate(codes)} read = deque() p = program(memory.copy(), read) mapa = {} i = 0 j = 0 start = None diri = None try: while True: r = next(p) if r == 10: i += 1 j = 0 else: c = chr(r) if c == '#': mapa[complex(i, j)] = c elif c == '^': mapa[complex(i, j)] = '^' start = complex(i, j) diri = complex(-1, 0) j += 1 # print(c, end='') except StopIteration: pass path = computePath(mapa, start, diri) # scaffold(mapa, start, complex(0,-1)) draw(mapa) pathStr = ",".join(map(str, path)) + "," # send main routine routine, methods = regexp(pathStr) # A = ['L', 10, 'L', 8, 'R', 12] # B = ['L', 8, 'L', 10, 'L', 6, 'L', 6] # C = ['L', 6, 'R', 8, 'R', 12, 'L', 6, 'L', 8] # routine = ['C','A','C','B','A','B','A','C','B','A'] inp = ",".join(routine) + '\n' for m in methods: inp += m[:-1] + "\n" inp += "n\n" mem2 = memory.copy() mem2[0] = 2 read2 = deque(map(ord, inp)) p = program(mem2, read2) # while True: # res = next(p) # print('>', res, chr(res))) *_, res = p print(">", res)
def main(codes): memory = {i: v for i, v in enumerate(codes)} read = deque() p = program(memory.copy(), read) instr = [ # jump if there's landing D and it's not #### # d & !(a & b & c) "OR A T", "AND B T", "AND C T", "NOT T J", "AND D J", # make sure you can walk E or double jump H # & (e | h) "NOT E T", "NOT T T", "OR H T", "AND T J", "RUN" ] inp = "\n".join(instr) + "\n" read.extend(map(ord, inp)) try: while True: res = next(p) if res < 0 or res > 255: print(res) else: print(chr(res), end='') # print('>', res, chr(res)) except StopIteration: pass
def main(codes): memory = {i: v for i, v in enumerate(codes)} read = deque() p = program(memory, read) mapa = {} i = 0 j = 0 start = None diri = None try: while True: r = next(p) if r == 10: print() i += 1 j = 0 else: c = chr(r) if c == '#': mapa[complex(i, j)] = c elif c == '^': start = complex(i, j) diri = complex(-1, 0) j += 1 print(c, end='') except StopIteration: pass scaffold(mapa, start, complex(0, -1)) draw(mapa)
def main(codes): # codes to dict memory = {i: v for i, v in enumerate(codes)} # print(list(program(memory, deque([1])))) read = deque() p = program(memory.copy(), read) tiles = {} info = {} try: while True: x = next(p) y = next(p) tile_id = next(p) if tile_id == 4: info['ball'] = (x, y) elif tile_id == 3: info['paddle'] = (x, y) tiles[(x, y)] = tile_id # print("new pos", pos) except StopIteration: print("blocks", sum(1 for v in tiles.values() if v == 2)) draw(tiles) # part 2 memory[0] = 2 # play for free read = AI(tiles) read.setBall(info['paddle']) read.setBall(info['ball']) p = program(memory, read) try: while True: x = next(p) y = next(p) tile_id = next(p) if x == -1 and y == 0: print("score", tile_id) else: tiles[(x, y)] = tile_id if tile_id == 4: read.setBall((x, y)) elif tile_id == 3: read.setPaddle((x, y)) except StopIteration: print("blocks", sum(1 for v in tiles.values() if v == 2))
def main(codes): memory = {i: v for i, v in enumerate(codes)} read = deque() p = program(memory, read) print(memory) mapa = {} count = 0 for i in range(50): for j in range(50): z = complex(i, j) read = deque([i, j]) p = program(memory.copy(), read) res = next(p) if res == 1: mapa[z] = '#' count += 1 draw(mapa) print('count', count)
def main(codes): memory = {i: v for i, v in enumerate(codes)} read = deque() p = program(memory, read) mapa = {} pos = complex(0, 0) mapa[pos] = 'S' explore(pos, p, read, mapa) draw(mapa) print("steps", shortest(pos, mapa))
def main(codes): memory = {i:v for i,v in enumerate(codes)} read = deque() p = program(memory, read) mapa = {} pos = complex(0,0) mapa[pos] = 'S' explore(pos, p, read, mapa) draw(mapa) start = next(p for p,s in mapa.items() if s == '$') print(start) print("minutes", max_depth(start, mapa))
def main(codes): # codes to dict memory = {i:v for i,v in enumerate(codes)} # print(list(program(memory, deque([1])))) read = deque() p = program(memory, read) tiles = {} try: while True: x,y,tile_id = [next(p) for _ in range(3)] tiles[(x,y)] = tile_id except StopIteration: print("painted", len(tiles)) print("blocks", sum(1 for v in tiles.values() if v == 2))
def main(codes): # codes to dict memory = {i:v for i,v in enumerate(codes)} # print(list(program(memory, deque([1])))) mapa = defaultdict(lambda: False) # True if white, False if black pos = complex(0,0) dirs = [complex(0,1), complex(1,0), complex(0,-1), complex(-1,0)] facingIdx = 0 # up # part2 mapa[pos] = True # white panel def get(p): return 1 if mapa[p] else 0 read = deque() p = program(memory, read) try: while True: # give input to the program v = get(pos) read.append(v) # get color to paint color = next(p) # print("GOT COLOR", color) # paint mapa[pos] = color == 1 diri = next(p) # print("GOT DIR", diri) # rotate if diri == 0: # left facingIdx = (facingIdx - 1) % 4 else: facingIdx = (facingIdx + 1) % 4 # update pos pos += dirs[facingIdx] # print("new pos", pos) except StopIteration: # done with colors print("painted", len(mapa)) draw(mapa)
def main(codes): memory = {i:v for i,v in enumerate(codes)} read = deque() p = program(memory, read) print(memory) mapa = {} def check(z): read = deque([int(z.real),int(z.imag)]) p = program(memory.copy(), read) res = next(p) return res == 1 for x in range(20): for y in range(20): z = complex(x,y) if check(z): mapa[z] = '#' draw(mapa) # follow top part of beam z = complex(200,0) while True: while not check(z): z += complex(0,1) # print('found ', z) bottom_left = z + complex(-99, 99) if check(bottom_left): top_left = complex(min(z.real, bottom_left.real), min(z.imag, bottom_left.imag)) print('probably found', top_left) break z += complex(1,0) while check(z): z += complex(1,0)
def check(z): read = deque([int(z.real),int(z.imag)]) p = program(memory.copy(), read) res = next(p) return res == 1