コード例 #1
0
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))
コード例 #2
0
ファイル: 05_sunny.py プロジェクト: khelwood/advent-of-code
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])
コード例 #3
0
ファイル: 09_boost.py プロジェクト: khelwood/advent-of-code
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)
コード例 #4
0
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
コード例 #5
0
ファイル: 07_amp.py プロジェクト: khelwood/advent-of-code
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
コード例 #6
0
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()
コード例 #7
0
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)
コード例 #8
0
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