Add solution for day 8

This commit is contained in:
William Brawner 2022-12-11 21:23:01 -06:00
parent 520bbd3d5c
commit 208da78321
2 changed files with 101 additions and 1 deletions

100
python/day08.py Executable file
View file

@ -0,0 +1,100 @@
#!/usr/bin/env python3
from pprint import pprint
from util import read_input
def part1(lines):
visible = (len(lines) * 2) + (len(lines[0].strip()) * 2) - 4
height = len(lines)
width = len(lines[0])
for i in range(0, height):
for j in range(0, width):
if i == 0 or i == height - 1 or j == 0 or j == width - 1:
continue
tree = int(lines[i][j])
visibleFromLeft = True
for k in range(j - 1, -1, -1):
other = int(lines[i][k])
if other >= tree:
visibleFromLeft = False
break
if visibleFromLeft:
visible += 1
continue
visibleFromRight = True
for k in range(j + 1, width):
other = int(lines[i][k])
if other >= tree:
visibleFromRight = False
break
if visibleFromRight:
visible += 1
continue
visibleFromTop = True
for k in range(i - 1, -1, -1):
other = int(lines[k][j])
if other >= tree:
visibleFromTop = False
break
if visibleFromTop:
visible += 1
continue
visibleFromBottom = True
for k in range(i + 1, height):
other = int(lines[k][j])
if other >= tree:
visibleFromBottom = False
break
if visibleFromBottom:
visible += 1
continue
return visible
def part2(lines):
max_score = 0
height = len(lines)
width = len(lines[0])
for i in range(0, height):
for j in range(0, width):
if i == 0 or i == height - 1 or j == 0 or j == width - 1:
continue
tree = int(lines[i][j])
leftScore = 0
for k in range(j - 1, -1, -1):
other = int(lines[i][k])
leftScore += 1
if other >= tree:
break
rightScore = 0
for k in range(j + 1, width):
other = int(lines[i][k])
rightScore += 1
if other >= tree:
break
topScore = 0
for k in range(i - 1, -1, -1):
other = int(lines[k][j])
topScore += 1
if other >= tree:
break
bottomScore = 0
for k in range(i + 1, height):
other = int(lines[k][j])
bottomScore += 1
if other >= tree:
break
total = leftScore * rightScore * topScore * bottomScore
if total > max_score:
max_score = total
print('max: ' + str(max_score))
return max_score
test_input = read_input("Day08_test")
assert 21 == part1(test_input)
real_input = read_input('Day08')
print(part1(real_input))
assert 8 == part2(test_input)
print(part2(real_input))

View file

@ -1,3 +1,3 @@
def read_input(path): def read_input(path):
with open(path + '.txt', 'r') as input_file: with open(path + '.txt', 'r') as input_file:
return input_file.readlines() return list(map(lambda x: x.strip(), input_file.readlines()))