コード例 #1
0
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)
コード例 #2
0
ファイル: day21b.py プロジェクト: louis-cl/aoc2019
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
コード例 #3
0
ファイル: day17a.py プロジェクト: louis-cl/aoc2019
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)
コード例 #4
0
ファイル: day13b.py プロジェクト: louis-cl/aoc2019
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))
コード例 #5
0
ファイル: day19a.py プロジェクト: louis-cl/aoc2019
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)
コード例 #6
0
ファイル: day15a.py プロジェクト: louis-cl/aoc2019
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))
コード例 #7
0
ファイル: day15b.py プロジェクト: louis-cl/aoc2019
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))
コード例 #8
0
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))
コード例 #9
0
ファイル: day11b.py プロジェクト: louis-cl/aoc2019
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)
コード例 #10
0
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)
コード例 #11
0
 def check(z):
     read = deque([int(z.real),int(z.imag)])
     p = program(memory.copy(), read)
     res = next(p)
     return res == 1