| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- import os, argparse
- import numpy as np
- def solve_task(lines):
- trees = np.array([[int(c) for c in line] for line in lines])
- visible = np.zeros((len(trees), len(trees[0])))
- #print(visible)
- for r in range(4):
- check_visibility_from_left(np.rot90(trees, r), np.rot90(visible, r))
- print(np.sum(visible))
- def flip_y(trees):
- return [reversed(line) for line in trees]
- def check_visibility_from_left(trees, visibility):
- for y, line in enumerate(trees):
- tallest_so_far = -1
- for x, tree_height in enumerate([int(c) for c in line]):
- if tree_height > tallest_so_far:
- tallest_so_far = tree_height
- visibility[y, x] = True
- def read_lines(filename):
- lines = []
- with open(filename) as infile:
- for raw_line in infile:
- line = raw_line.rstrip()
- lines.append(line)
- return lines
- def parse_arguments():
- parser = argparse.ArgumentParser(description="Script that solves the case",epilog="Have a nice day!")
- parser.add_argument('filename', nargs='?', default="example.txt", help='Input file')
- args = parser.parse_args()
- return args
- def main():
- args = parse_arguments()
- lines = read_lines(args.filename)
- solve_task(lines)
- if __name__ == "__main__":
- main()
|