You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.5 KiB
60 lines
1.5 KiB
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
|
|
|
|
def visible(t,x,y):
|
|
if x == 0 or y == 0 or x == (len(t[0]) - 1) or y == (len(t) - 1):
|
|
return 1
|
|
h = t[y][x]
|
|
v = 1
|
|
for r in [(0,x),(x+1,len(t[y]))]: # left, right
|
|
for i in range(*r):
|
|
if h <= t[y][i]: v = 0
|
|
if v == 1: return v
|
|
else: v = 1
|
|
for r in [(0,y),(y+1,len(t))]: # up, down
|
|
for i in range(*r):
|
|
if h <= t[i][x]: v = 0
|
|
if v == 1: return v
|
|
else: v = 1
|
|
return 0
|
|
|
|
def scenic(t,x,y):
|
|
if x == 0 or y == 0 or x == (len(t[0]) - 1) or y == (len(t) - 1):
|
|
return 0
|
|
h = t[y][x]
|
|
score = 1
|
|
cur = 0
|
|
for r in [(x-1,-1,-1),(x+1,len(t[y]))]: # left, right
|
|
for i in range(*r):
|
|
cur = cur + 1
|
|
if h <= t[y][i]: break
|
|
score = score * cur
|
|
cur = 0
|
|
for r in [(y-1,-1,-1),(y+1,len(t))]: # up, down
|
|
for i in range(*r):
|
|
cur = cur + 1
|
|
if h <= t[i][x]: break
|
|
score = score * cur
|
|
cur = 0
|
|
return score
|
|
|
|
if __name__ == '__main__':
|
|
trees = [[int(l) for l in list(line.strip('\n'))] for line in open(sys.argv[1])]
|
|
vis = 0
|
|
scene = 0
|
|
for i in range(len(trees)):
|
|
for j in range(len(trees[i])):
|
|
vis = vis + visible(trees,j,i)
|
|
sc_score = scenic(trees,j,i)
|
|
if sc_score > scene: scene = sc_score
|
|
|
|
# challenge 1
|
|
res1 = str(vis)
|
|
print("challenge 1:" + "\n" + res1 + "\n")
|
|
|
|
# challenge 2
|
|
res2 = str(scene)
|
|
print("challenge 2:" + "\n" + res2 + "\n")
|
|
|
|
|