a.py (1210B)
1 def is_visible(i, j): 2 this = grid[i][j] 3 surround = [ 4 [grid[i2][j] for i2 in range(i)], 5 [grid[i][j2] for j2 in range(j)], 6 [grid[i2][j] for i2 in range(i+1, len(grid))], 7 [grid[i][j2] for j2 in range(j+1, len(grid[0]))], 8 ] 9 return any([all([s < this for s in sur]) for sur in surround]) 10 11 def view(i, j): 12 score = 1 13 this = grid[i][j] 14 surround = [ 15 [grid[i2][j] for i2 in range(i-1, -1, -1)], 16 [grid[i][j2] for j2 in range(j-1, -1, -1)], 17 [grid[i2][j] for i2 in range(i+1, len(grid))], 18 [grid[i][j2] for j2 in range(j+1, len(grid[0]))], 19 ] 20 for sur in surround: 21 surlen = len(sur) 22 i = 0 23 while i < surlen and sur[i] < this: 24 i += 1 25 if i < surlen and sur[i] >= this: 26 i += 1 27 score *= i 28 return score 29 30 31 #with open("example") as f: 32 with open("input") as f: 33 grid = [line.strip() for line in f.readlines()] 34 width, height = len(grid[0]), len(grid) 35 edge_visible = (width + height-2) * 2 36 highest = 0 37 for i in range(1, height-1): 38 for j in range(1, width-1): 39 score = view(i, j) 40 if score > highest: 41 highest = score 42 print(highest)