advent_of_code/2022/8/8_2.py

61 lines
1.6 KiB
Python
Raw Normal View History

2022-12-10 16:12:06 +01:00
#!/usr/bin/env python
# 2022 - Advent Of Code 8 part 2
file = 'input_example.txt'
file = 'input.txt'
def parse_file(input_file):
tmap = []
vmap = []
with open(input_file, encoding="utf-8") as f:
for line in f.readlines():
tline = []
vline = []
for c in line.strip():
tline.append(int(c))
vline.append(0)
tmap.append(tline)
vmap.append(vline)
return tmap, vmap
tree_map, visible_map = parse_file(file)
for y in range(1, len(tree_map) - 1):
for x in range(1, len(tree_map[0]) - 1):
# calculate scenic score
up = down = left = right = 1
cur_height = tree_map[y][x]
var = y - 1
while var > 0 and tree_map[var][x] < cur_height:
up += 1
var -= 1
var = y + 1
while var < len(tree_map)-1 and tree_map[var][x] < cur_height:
down += 1
var += 1
var = x - 1
while var > 0 and tree_map[y][var] < cur_height:
left += 1
var -= 1
var = x + 1
while var < len(tree_map[0])-1 and tree_map[y][var] < cur_height:
right += 1
var += 1
scenic_score = cur_height
# print(f'up: {up}, down: {down}, left: {left}, right: {right}')
scenic_score = up * down * left * right
visible_map[y][x] = scenic_score
for v in visible_map:
print(v)
score_max = 0
for y in range(1, len(tree_map) - 1):
for x in range(1, len(tree_map[0]) - 1):
if visible_map[y][x] > score_max:
score_max = visible_map[y][x]
print(f'max scenic score: {score_max}')