Files
aoc_2022_python/08/08.py
T
2022-12-11 18:35:00 +03:00

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]))))