1
0
Fork 0

add 2022/day08.2

This commit is contained in:
Sebastian Mark 2024-12-12 20:22:43 +01:00
parent 6719edb915
commit 109ddc67b6

View file

@ -43,17 +43,52 @@ def is_visible(trees: list, tree_y: int, tree_x: int) -> bool:
return False
def scenic_score(trees: list, tree_y: int, tree_x: int) -> int:
height = len(trees)
width = len(trees[0])
score = 1
# check up, right, down, right
directions = [(-1, 0), (0, 1), (1, 0), (0, -1)]
for dy, dx in directions:
nxty = tree_y + dy
nxtx = tree_x + dx
visual_range = 1
# continue to check in the direction til border
while 0 < nxty < height - 1 and 0 < nxtx < width - 1:
# check size, stop if bigger tree found
if trees[tree_y][tree_x] <= trees[nxty][nxtx]:
break
visual_range += 1
nxtx += dx
nxty += dy
score *= visual_range
return score
def main():
trees = readinput()
# part 1
visible = 0
for y in range(len(trees)):
for x in range(len(trees[0])):
if is_visible(trees, y, x):
visible += 1
print("Visible trees: %d" % visible)
# part 1
scenic_scores = []
for y in range(len(trees)):
for x in range(len(trees[0])):
scenic_scores.append(scenic_score(trees, y, x))
print("Highest scenic score: %d" % max(scenic_scores))
if __name__ == "__main__":
main()