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

#!/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")