Browse Source

Day 8

master
Noëlle Anthony 5 months ago
parent
commit
2446b39dc0
1 changed files with 0 additions and 110 deletions
  1. 0
    110
      day08-1.py

+ 0
- 110
day08-1.py View File

@@ -1,110 +0,0 @@
MAP = []
DEBUG = False

class Tree:
def __init__(self, x_pos, y_pos, height):
self.x = x_pos
self.y = y_pos
self.height = height
self.view_up = 0
self.view_down = 0
self.view_left = 0
self.view_right = 0

def check_left(self):
if DEBUG:
print("### Checking left ###")
trees = MAP[self.y][:self.x]
tallest = 0
distance = 0
tallest_distance = 0
for tree in trees[::-1]:
distance += 1
if DEBUG:
print(f"{self.height=}, {tree=}, {distance=}, {tallest=}, {tallest_distance=}")
if tree >= self.height:
tallest_distance = distance
break
if tree > tallest:
tallest = tree
tallest_distance = distance
self.view_left = tallest_distance
def check_right(self):
if DEBUG:
print("### Checking right ###")
trees = MAP[self.y][self.x+1:]
tallest, distance, tallest_distance = 0, 0, 0
for tree in trees:
distance += 1
if DEBUG:
print(f"{self.height=}, {tree=}, {distance=}, {tallest=}, {tallest_distance=}")
if tree >= self.height:
tallest_distance = distance
break
if tree > tallest:
tallest = tree
tallest_distance = distance
self.view_right = tallest_distance

def check_up(self):
if DEBUG:
print("### Checking up ###")
trees = [row[self.x] for row in MAP[:self.y]]
tallest, distance, tallest_distance = 0, 0, 0
for tree in trees[::-1]:
distance += 1
if DEBUG:
print(f"{self.height=}, {tree=}, {distance=}, {tallest=}, {tallest_distance=}")
if tree >= self.height:
tallest_distance = distance
break
if tree > tallest:
tallest = tree
tallest_distance = distance
self.view_up = tallest_distance

def check_down(self):
if DEBUG:
print("### Checking down ###")
trees = [row[self.x] for row in MAP[self.y+1:]]
tallest, distance, tallest_distance = 0, 0, 0
for tree in trees:
distance += 1
if DEBUG:
print(f"{self.height=}, {tree=}, {distance=}, {tallest=}, {tallest_distance=}")
if tree >= self.height:
tallest_distance = distance
break
if tree > tallest:
tallest = tree
tallest_distance = distance
self.view_down = tallest_distance

@property
def scenic_score(self):
self.check_down()
self.check_up()
self.check_left()
self.check_right()
return self.view_down + self.view_up + self.view_left + self.view_right

def main():
global MAP, DEBUG
with open("day08.input", "r") as file:
lines = [line.strip() for line in file.readlines()]
MAP = [[int(char) for char in line] for line in lines]

trees = []
for y, line in enumerate(MAP):
for x, tree in enumerate(line):
trees.append(Tree(x, y, tree))
max_score = max(trees, key=lambda t: t.scenic_score)
# max_score = Tree(67, 38, MAP[38][67])
# DEBUG = True
print(max_score.scenic_score)
print(max_score.__dict__)

if __name__ == "__main__":
main()

Loading…
Cancel
Save