For our future Robotropolis we need to help the city planners calculate the way light reaches our fair city so as to limit the Urban Canyon effect. To do this, you will need to define the visibility of buildings from the southern edge of the base. You have been given a map of the buildings in the complex as an aide for your planning.
The map is an orthogonal projection of each of the buildings onto a horizontal plane. It’s oriented on a rectangular coordinate system so that the positive x-axis points east and the positive y-axis points north. No two buildings in the map overlap or touch. Each of the buildings have perfectly rectangular sides which are aligned from north to south and east to west. The map is a list of buildings with each building presented as a list with coordinates describing the south-west corner, and north-east corner along with the height - [Xsw, Ysw, Xne, Yne, height]. We need to determinate how many of the buildings are visible from the area just south of the base (excluding the angle of vision, just using projection.) See the illustration below.
Input: Building coordinates and heights as a list of lists. The coordinates are integers. The heights are integers or floats.
Output:The quantity of visible buildings as an integer.
How it is used: This concept is useful for image recognition systems and graphical systems. When rendering of 3D model you should determine the visibility of the surfaces. It can also be applied in architecture and city planning, allowing you to plan out which sides of a building will receive sunlight, or if a building will block natural light in another building.
0 < len(buildings) < 10
all(all(0 ≤ x < 12 for x in row[:4]) for row in buildings)
all(0 < row ≤ 20 for row in buildings)