Advent of Code 2022 day 8
Took too long on part 2 again. Didn’t realise you could still see the tree even
if it was taller, hence all of the additional {var} += 1
. I’m getting
speedier at part 1 which is good to see. Embarrassingly, I didn’t realise the
keyword I wanted is called break
and not continue
. Oops.
with open("8.txt") as f: lines = f.read().splitlines() board = [[x for x in line] for line in lines] def is_visible(board, y, x): if all(board[y][i] < board[y][x] for i in range(x)): return True if all(board[j][x] < board[y][x] for j in range(y)): return True if all(board[y][i] < board[y][x] for i in range(x+1, len(board[y]))): return True if all(board[j][x] < board[y][x] for j in range(y+1, len(board))): return True return False count = 0 for y in range(len(board)): for x in range(len(board[y])): if is_visible(board, y, x): count += 1 print(count) # part 2 def scenic_score(board, y, x): a = 0 for i in range(x-1, -1, -1): if board[y][i] < board[y][x]: a += 1 elif board[y][i] == board[y][x]: a += 1 break else: a += 1 break b = 0 for j in range(y-1, -1, -1): if board[j][x] < board[y][x]: b += 1 elif board[j][x] == board[y][x]: b += 1 break else: b += 1 break c = 0 for i in range(x+1, len(board[y])): if board[y][i] < board[y][x]: c += 1 elif board[y][i] == board[y][x]: c += 1 break else: c += 1 break d = 0 for j in range(y+1, len(board)): if board[j][x] < board[y][x]: d += 1 elif board[j][x] == board[y][x]: d += 1 break else: d += 1 break return a*b*c*d max_score = 0 for y in range(len(board)): for x in range(len(board[y])): if (score:=scenic_score(board, y, x)) > max_score: max_score = score print(max_score)