a.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import os, argparse
  2. import numpy as np
  3. def solve_task(lines):
  4. trees = np.array([[int(c)] for c in lines])
  5. visible = np.zeros((len(trees), len(trees[0])))
  6. print(visible)
  7. check_visibility_from_left(trees, visible)
  8. print(visible)
  9. check_visibility_from_left(np.rot90(trees, 1), np.rot90(visible, 1))
  10. print(visible)
  11. def flip_y(trees):
  12. return [reversed(line) for line in trees]
  13. def check_visibility_from_left(trees, visibility):
  14. for y, line in enumerate(trees):
  15. tallest_so_far = -1
  16. for x, tree_height in enumerate([int(c) for c in line]):
  17. if tree_height > tallest_so_far:
  18. tallest_so_far = tree_height
  19. visibility[y, x] = True
  20. def read_lines(filename):
  21. lines = []
  22. with open(filename) as infile:
  23. for raw_line in infile:
  24. line = raw_line.rstrip()
  25. lines.append(line)
  26. return lines
  27. def parse_arguments():
  28. parser = argparse.ArgumentParser(description="Script that solves the case",epilog="Have a nice day!")
  29. parser.add_argument('filename', nargs='?', default="example.txt", help='Input file')
  30. args = parser.parse_args()
  31. return args
  32. def main():
  33. args = parse_arguments()
  34. lines = read_lines(args.filename)
  35. solve_task(lines)
  36. if __name__ == "__main__":
  37. main()