Sean McLemon | Advent of Code

Home | Czech | Blog | GitHub | Advent Of Code | Notes


2017-12-19 - A Series of Tubes

(original .ipynb)
puzzle_input_lines = open("puzzle_input/day19.txt").readlines()

test_input_lines = """     |          
     |  +--+    
     A  |  C    
 F---|----E|--+ 
     |  |  |  D 
     +B-+  +--+ """.split("\n")
def left(dr, dc):
    return (-dc, dr)


def right(dr, dc):
    return (dc, -dr)


def can_move_to(grid, r, c):
    row_ok = r >= 0 and r < len(grid)
    col_ok = c >= 0 and c < len(grid[0])
    if row_ok and col_ok and not grid[r][c].isspace():
        return True
    return False


def solve(input_lines):
    r, c = (0, input_lines[0].index("|"))
    dr, dc = (1, 0)
    path = []
    steps = 0
    
    while True:
        tile = input_lines[r][c]
        if tile == "+":
            lr, lc = left(dr, dc)
            rr, rc = right(dr, dc)
            
            if can_move_to(input_lines, r+lr, c+lc):
                dr, dc = lr, lc
            else:
                dr, dc = rr, rc
        elif tile.isalpha():
            path.append(tile)
        elif tile == " ":
            break
        
        r += dr
        c += dc
        steps += 1
    
    return "".join(path), steps


assert "ABCDEF", 38 == solve(test_input_lines)

part_one, part_two = solve(puzzle_input_lines)
print("part one:", part_one)
print("part two:", part_two)
part one: EPYDUXANIT
part two: 17544