76 lines
1.6 KiB
Python
76 lines
1.6 KiB
Python
|
|
with open('input') as file:
|
|
field = list(map(lambda x: list(map(int, x)), file.read().strip().split('\n')))
|
|
|
|
visible = set()
|
|
|
|
for i in range(len(field)):
|
|
m = -1
|
|
for j in range(len(field)):
|
|
if field[i][j]>m:
|
|
m = field[i][j]
|
|
visible.add((i, j))
|
|
|
|
for i in range(len(field)):
|
|
m = -1
|
|
for j in range(len(field)-1, -1, -1):
|
|
if field[i][j]>m:
|
|
m = field[i][j]
|
|
visible.add((i, j))
|
|
|
|
for j in range(len(field)-1, -1, -1):
|
|
m = -1
|
|
for i in range(len(field)):
|
|
if field[i][j]>m:
|
|
m = field[i][j]
|
|
visible.add((i, j))
|
|
|
|
for j in range(len(field)-1, -1, -1):
|
|
m = -1
|
|
for i in range(len(field)-1, -1, -1):
|
|
if field[i][j]>m:
|
|
m = field[i][j]
|
|
visible.add((i, j))
|
|
|
|
print(len(visible))
|
|
|
|
def scenic_score(field, mi, mj):
|
|
n = len(field)
|
|
m = len(field[0])
|
|
s = 1
|
|
k = 0
|
|
i = mi+1
|
|
while not (i==n or field[i][mj]>=field[mi][mj]):
|
|
k += 1
|
|
i += 1
|
|
if not i==n:
|
|
k += 1
|
|
s *= k
|
|
k = 0
|
|
i = mi-1
|
|
while not (i==-1 or field[i][mj]>=field[mi][mj]):
|
|
k += 1
|
|
i -= 1
|
|
if not i==-1:
|
|
k += 1
|
|
s *= k
|
|
k = 0
|
|
j = mj+1
|
|
while not (j==m or field[mi][j]>=field[mi][mj]):
|
|
k += 1
|
|
j += 1
|
|
if not j==n:
|
|
k += 1
|
|
s *= k
|
|
k = 0
|
|
j = mj-1
|
|
while not (j==-1 or field[mi][j]>=field[mi][mj]):
|
|
k += 1
|
|
j -= 1
|
|
if not j==-1:
|
|
k += 1
|
|
s *= k
|
|
return s
|
|
|
|
print(max(scenic_score(field, i, j) for i in range(len(field)) for j in range(len(field[0]))))
|