from util import get_input, transpose

input = get_input("13.input")

folds = []
numbers = []

for line in input:
    if line.startswith("fold along"):
        [d, i] = line.split()[2].split("=")
        folds.append((d, int(i)))
    elif line != "":
        [x, y] = line.split(",")
        numbers.append((int(x), int(y)))

grid = [['.' for _ in range((max(x for (x, y) in numbers) + 1))] for _ in range(max(y for (x, y) in numbers) + 1)]

for (x, y) in numbers:
    grid[y][x] = '#'

def print_grid(grid):
    print("\n".join(["".join(row) for row in grid]))

def fold_y(grid, i):
    y = i - 1
    for dy, row in enumerate(grid[i + 1:]):
        grid[y - dy] = ['#' if row[x] == '#' or grid[y - dy][x] == '#' else '.' for x in range(len(grid[0]))]
    grid = grid[:i]
    return grid

def fold(grid, d, i):
    if d == 'y':
        grid = fold_y(grid, i)
    else:
        grid = transpose(grid)
        grid = fold_y(grid, i)
        grid = transpose(grid)
    return grid


for (d, i) in folds:
    grid = fold(grid, d, i)
    break

print("Task 1:", sum(sum(1 if c == '#' else 0 for c in row) for row in grid))

for (d, i) in folds[1:]:
    grid = fold(grid, d, i)

print("Task 2:")
print_grid(grid)