Advent of Code 2022 Day 8

Author

Nathan Moore

— Day 8: Treetop Tree House —

We would like to build a tree house, but want to make sure it is hidden.

Consider your map; how many trees are visible from outside the grid?

import numpy as np

with open('data-2022-08.txt', 'r') as f:
    inp = f.read().splitlines()

numpy!

trees = [list(map(int, x)) for x in inp]

tre = np.array(trees)

ts = 2*99 + 2*97

for x in range(1,98): 
    for y in range(1,98):
        t = tre[x,y]
        if (t > np.max(tre[:x,y]) or 
            t > np.max(tre[x,:y]) or 
            t > np.max(tre[x+1:,y]) or 
            t > np.max(tre[x,y+1:])
            ):
            ts += 1

ts
# 1681
1681

— Part Two —

Calculate how far you can see from each tree for its “scenic score”

Consider each tree on your map. What is the highest scenic score possible for any tree?

view = np.zeros((99,99))


def treeview(x, y):
    t = tre[x,y]
    u = 0
    d = 0
    l = 0
    r = 0
    # up
    if x == 1: 
        u = 1
    else: 
        for i in range(x-1, -1, -1):
            if t > tre[i, y]:
                u += 1
            if t <= tre[i, y]:
                u += 1
                break
    # down
    if x == 97:
        d = 1
    else: 
        for i in range(x+1, 99, 1):
            if t > tre[i, y]:
                d += 1
            if t <= tre[i, y]:
                d += 1
                break
    # left
    if y == 1:
        l = 1
    else: 
        for i in range(y-1, -1, -1):
            if t > tre[x, i]:
                l += 1
            if t <= tre[x, i]:
                l += 1
                break
    # right
    if y == 97:
        r = 1
    else: 
        for i in range(y+1, 99, 1):
            if t > tre[x, i]:
                r += 1
            if t <= tre[x, i]:
                r += 1
                break
    # return
    # print('u: ' + str(u))
    # print('d: ' + str(d))
    # print('l: ' + str(l))
    # print('r: ' + str(r))
    # print()
    return int(u * d * l * r)

for x in range(1,97): 
    for y in range(1,97):
        view[x, y] = treeview(x, y)


int(np.max(view))
        
# 201684
201684