diff --git a/2022/day08.py b/2022/day08.py new file mode 100644 index 0000000..e74b0ee --- /dev/null +++ b/2022/day08.py @@ -0,0 +1,66 @@ +import numpy as np + +with open('input/08', 'r') as file: + lines = file.read().strip().split('\n') +numbers = np.array([[int(x) for x in line] for line in lines]) + +w, h = numbers.shape +seen_arr = np.zeros_like(numbers) +seen_arr[0,:] = 1 +seen_arr[-1,:] = 1 +seen_arr[:,0] = 1 +seen_arr[:,-1] = 1 + +for x in range(w): + highest_seen = numbers[x,0] + for y in range(1, h): + n = numbers[x,y] + if n > highest_seen: + seen_arr[x,y] = 1 + highest_seen = n + highest_seen = numbers[x,h-1] + for y in range(h-2, 0, -1): + n = numbers[x,y] + if n > highest_seen: + seen_arr[x,y] = 1 + highest_seen = n +for y in range(h): + highest_seen = numbers[0,y] + for x in range(1, w): + n = numbers[x,y] + if n > highest_seen: + seen_arr[x,y] = 1 + highest_seen = n + highest_seen = numbers[w-1,y] + for x in range(w-2, 0, -1): + n = numbers[x,y] + if n > highest_seen: + seen_arr[x,y] = 1 + highest_seen = n +print(f'Part 1: {seen_arr.sum()}') + +seen_arr = np.zeros_like(numbers) +for x in range(1,w-1): + for y in range(1,h-1): + seen = np.zeros(4, dtype=np.int32) + treehouse = numbers[x,y] + for x1 in range(x+1, w): + seen[0] += 1 + if numbers[x1,y] >= treehouse: + break + for x1 in range(x-1, -1, -1): + seen[1] += 1 + if numbers[x1,y] >= treehouse: + break + for y1 in range(y+1, h): + seen[2] += 1 + if numbers[x,y1] >= treehouse: + break + for y1 in range(y-1, -1, -1): + seen[3] += 1 + if numbers[x,y1] >= treehouse: + break + score = seen.prod() + # print(f'{x},{y}: {seen} = {score}') + seen_arr[x,y] = score +print(f'Part 2: {seen_arr.max()}')