a.py 1.3 KB

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