def main(): prog_input = parse_program_input(sys.stdin.read().strip()) prog = Program(prog_input) prog.execute() view = prog.output_values view = ''.join(map(chr, view)).strip() print(view) viewlines = view.splitlines() alignment = sum(x*y for (x,y) in intersections(viewlines, SCAFFOLD_S)) print("Alignment:", alignment) grid = LineGrid(viewlines) print("Route:") print(','.join(t+str(s) for (t,s) in find_path(grid))) # I didn't find this programmatically, just from inspection patternA = 'L,12,L,12,R,12' patternB = 'L,8,L,8,R,12,L,8,L,8' patternC = 'L,10,R,8,R,12' route = 'A,A,B,C,C,A,B,C,A,B' feed = 'n\n' input_string = '\n'.join([route, patternA, patternB, patternC, feed]) prog_data = list(prog_input) prog_data[0] = 2 prog = Program(prog_data) prog.run_input(input_string) print(''.join(chr(v) if v < 256 else '\n%s'%v for v in prog.output_values))
def main(): data = parse_program_input(sys.stdin.read()) prog = Program(data, [1]) prog.execute() print("First program output:", prog.output_values[-1]) prog = Program(data, [5]) prog.execute() print("Second program output:", prog.output_values[-1])
def main(): data = parse_program_input(sys.stdin.read()) prog = Program(data, [1]) prog.execute() print(prog.output_values) prog = Program(data, [2]) prog.execute() print(prog.output_values)
def find_noun_verb(data, target): for noun, verb in itertools.product(range(100), repeat=2): prog = Program(data) prog[1] = noun prog[2] = verb prog.execute() if prog[0] == target: return (noun, verb) return None
def find_highest_output(prog_input): highest = 0 for phases in permutations(range(5), 5): last_out = 0 for phase in phases: prog = Program(prog_input, [phase, last_out]) prog.execute() last_out = prog.output_values[0] highest = max(highest, last_out) return highest
def main(): filename = 'savedata' if len(sys.argv) == 2: filename = sys.argv[1] with open(filename, 'r') as fin: data = fin.read() program_input = parse_program_input(data) droid = Program(program_input) droid.input_func = droid_input droid.output_func = droid_output droid.execute()
def main(): data = parse_program_input(sys.stdin.read()) program = Program(data) program[1] = 12 program[2] = 2 program.execute() print("Part 1", program[0]) target = 19690720 noun, verb = find_noun_verb(data, target) print("Part 2", 100 * noun + verb)
def in_tractor(x, y, _cache={}): pos = (x, y) result = _cache.get(pos) if result is not None: return result prog = Program(prog_input) prog.input_values = [x, y] prog.execute() result = bool(prog.output_values[-1]) _cache[pos] = result return result