matrix = [[int(i) for i in j] for j in open("input.txt", 'r').read().splitlines()] visible = set() highScore = 0 highScoreCoord = () def walk(line): vis = [0] tallest = line[0] for i in range(1, len(line)): if line[i] > tallest: vis.append(i) tallest = line[i] return vis def findFirst(line, height): for i in range(len(line)): if line[i] >= height: return i+1 return len(line) for i in range(len(matrix)): for coord in walk(matrix[i]): visible.add((i, coord)) for coord in walk(matrix[i][::-1]): visible.add((i, len(matrix) - (coord) - 1)) for i in range(len(matrix[0])): col = [matrix[j][i] for j in range(len(matrix[0]))] for coord in walk(col): visible.add((coord, i)) for coord in walk(col[::-1]): visible.add((len(matrix[0]) - (coord) - 1, i)) for i in range(len(matrix)): for j in range(len(matrix[0])): score = 0 left = findFirst(matrix[i][:j][::-1], matrix[i][j]) right = findFirst(matrix[i][j+1:], matrix[i][j]) col = [matrix[x][j] for x in range(len(matrix[0]))] up = findFirst(col[:i][::-1], matrix[i][j]) down = findFirst(col[i+1:], matrix[i][j]) score = up*down*left*right if score > highScore: highScore = score highScoreCoord = (i,j) print(len(visible)) print(highScore)