| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import os, argparse
- import numpy as np
- def solve_task(lines):
- trees = np.array([[int(c)] for c in lines])
- visible = np.zeros((len(trees), len(trees[0])))
- print(visible)
- check_visibility_from_left(trees, visible)
- print(visible)
- check_visibility_from_left(np.rot90(trees, 1), np.rot90(visible, 1))
- print(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()
|