Problem Statement
During the course of a year, sunlight passes through the window at all possible angles. Create a class Solar that contains a method dark that will be given the location x1,y1 of one beam and the location x2,y2 of the other beam and will calculate what fraction of the collector never receives direct sunlight.
We can solve this problem by considering only a cross-section parallel to the base of the structure. Let the line segment y=0,0<=x<=6 be the window, and y=6,0<=x<=6 be the collector. In this view, each beam is a square with its sides given by xi, yi, xi+1, yi+1.
Definition
- Class:
- Solar
- Method:
- dark
- Parameters:
- int, int, int, int
- Returns:
- String
- Method signature:
- String dark(int x1, int y1, int x2, int y2)
- (be sure your method is public)
Notes
- The answer must be returned in reduced form with no blanks or leading zeroes
- The two beams may be in the same place. In this case there is really only one beam.
- Diagonally adjacent beams touch each other, leaving no gap.(Example 0)
- Return the 3 character string "0/1" if the entire collector can receive light
Constraints
- x1,y1,x2,y2 all are between 0 and 5 inclusive
Examples
4
4
5
3
Returns: "1/5"
(The coordinate grid is shown. 'X' indicates a 1 x 1 beam.) 6 +-+-+-+-+-+-+ Collector | | | | | | | 5 |-+-+-+-+-+-| | | | | |X| | 4 |-+-+-+-+-+-| | | | | | |X| 3 |-+-+-+-+-+-| | | | | | | | 2 |-+-+-+-+-+-| | | | | | | | 1 |-+-+-+-+-+-| | | | | | | | 0 +-+-+-+-+-+-+ Window 0 1 2 3 4 5 6 The collector is at y=6. The window is at y=0. The left-most X is the beam which completely fills the area 4<=x<=5,4<=y<=5. For this configuration, light can reach the left part of the collector. The farthest to the right that it can reach is when light enters at the lower left corner and just misses the top left corner of the leftmost beam; this ray of light has a slope of 5/4 so it strikes the collector at x=24/5. Thus 6 - 24/5 is always dark. This is 1/5 of the collector wall so your program should return "1/5"
1
5
4
4
Returns: "1/6"
6 +-+-+-+-+-+-+ Collector | |X| | | | | 5 |-+-+-+-+-+-| | | | | |X| | 4 |-+-+-+-+-+-| | | | | | | | 3 |-+-+-+-+-+-| | | | | | | | 2 |-+-+-+-+-+-| | | | | | | | 1 |-+-+-+-+-+-| | | | | | | | 0 +-+-+-+-+-+-+ Window 0 1 2 3 4 5 6 Light can go to the left of the leftmost beam, and can also go through the gap between the 2 beams and to the right of the right beam. The left area is obviously 1 unit. The right area covers the segment (24/5, 6). The middle covers the segment (2,24/5). The union of the three segments covers 5 units. So 1/6 of the collector is always dark.
0
3
1
3
Returns: "0/1"
0
0
3
4
Returns: "1/30"
1
1
3
4
Returns: "7/120"
2
3
3
4
Returns: "1/10"
0
0
1
4
Returns: "1/30"
0
2
3
5
Returns: "1/6"
0
4
2
5
Returns: "1/6"
1
4
3
5
Returns: "1/6"
3
5
5
5
Returns: "1/3"
0
0
0
0
Returns: "0/1"
0
0
5
4
Returns: "1/30"
1
4
1
4
Returns: "0/1"
2
3
1
4
Returns: "1/20"
1
4
2
4
Returns: "1/5"
1
4
1
4
Returns: "0/1"
1
5
1
5
Returns: "1/6"
0
0
0
5
Returns: "1/6"
0
0
1
4
Returns: "1/30"
0
0
1
5
Returns: "1/6"
0
0
2
4
Returns: "1/30"
0
0
2
5
Returns: "1/6"
0
0
3
4
Returns: "1/30"
0
0
3
5
Returns: "1/6"
0
0
4
4
Returns: "1/30"
0
0
4
5
Returns: "1/6"
0
0
5
4
Returns: "1/30"
0
0
5
5
Returns: "1/6"
0
1
0
5
Returns: "1/6"
0
1
1
4
Returns: "1/30"
0
1
1
5
Returns: "1/6"
0
1
2
4
Returns: "1/40"
0
1
2
5
Returns: "1/6"
0
1
3
4
Returns: "1/60"
0
1
3
5
Returns: "1/6"
0
1
4
4
Returns: "1/120"
0
1
4
5
Returns: "1/6"
0
1
5
5
Returns: "1/6"
0
2
0
5
Returns: "1/6"
0
2
1
4
Returns: "1/30"
0
2
1
5
Returns: "1/6"
0
2
2
4
Returns: "1/90"
0
2
2
5
Returns: "1/6"
0
2
3
5
Returns: "1/6"
0
2
4
5
Returns: "1/6"
0
2
5
5
Returns: "1/6"
0
3
0
5
Returns: "1/6"
0
3
1
4
Returns: "1/5"
0
3
1
5
Returns: "1/6"
0
3
2
5
Returns: "1/6"
0
3
3
5
Returns: "1/6"
0
3
4
5
Returns: "1/6"
0
3
5
5
Returns: "1/6"
0
4
0
5
Returns: "1/6"
0
4
1
4
Returns: "1/5"
0
4
1
5
Returns: "1/3"
0
4
2
5
Returns: "1/6"
0
4
3
5
Returns: "1/6"
0
4
4
5
Returns: "1/6"
0
4
5
5
Returns: "1/6"
0
5
0
5
Returns: "1/6"
0
5
1
5
Returns: "1/3"
0
5
2
5
Returns: "1/3"
0
5
3
5
Returns: "1/3"
0
5
4
5
Returns: "1/3"
0
5
5
5
Returns: "1/3"
1
0
1
5
Returns: "1/6"
1
0
2
5
Returns: "1/6"
1
0
3
5
Returns: "1/6"
1
0
4
5
Returns: "1/6"
1
0
5
5
Returns: "1/6"
1
1
1
5
Returns: "1/6"
1
1
2
5
Returns: "1/6"
1
1
3
4
Returns: "7/120"
1
1
3
5
Returns: "1/6"
1
1
4
4
Returns: "1/20"
1
1
4
5
Returns: "1/6"
1
1
5
4
Returns: "1/24"
1
1
5
5
Returns: "1/6"
1
2
1
5
Returns: "1/6"
1
2
2
4
Returns: "1/15"
1
2
2
5
Returns: "1/6"
1
2
3
4
Returns: "2/45"
1
2
3
5
Returns: "1/6"
1
2
4
4
Returns: "1/45"
1
2
4
5
Returns: "1/6"
1
2
5
5
Returns: "1/6"
1
3
1
5
Returns: "1/6"
1
3
2
4
Returns: "3/20"
1
3
2
5
Returns: "1/6"
1
3
3
4
Returns: "1/60"
1
3
3
5
Returns: "1/6"
1
3
4
5
Returns: "1/6"
1
3
5
5
Returns: "1/6"
1
4
1
5
Returns: "1/6"
1
4
2
4
Returns: "1/5"
1
4
2
5
Returns: "3/10"
1
4
3
5
Returns: "1/6"
1
4
4
5
Returns: "1/6"
1
4
5
5
Returns: "1/6"
1
5
1
5
Returns: "1/6"
1
5
2
5
Returns: "1/3"
1
5
3
5
Returns: "1/3"
1
5
4
5
Returns: "1/3"
1
5
5
5
Returns: "1/3"
2
0
2
5
Returns: "1/6"
2
0
3
5
Returns: "1/6"
2
0
4
5
Returns: "1/6"
2
0
5
5
Returns: "1/6"
2
1
2
5
Returns: "1/6"
2
1
3
5
Returns: "1/6"
2
1
4
5
Returns: "1/6"
2
1
5
5
Returns: "1/6"
2
2
2
5
Returns: "1/6"
2
2
3
5
Returns: "1/6"
2
2
4
4
Returns: "7/90"
2
2
4
5
Returns: "1/6"
2
2
5
4
Returns: "1/18"
2
2
5
5
Returns: "1/6"
2
3
2
5
Returns: "1/6"
2
3
3
4
Returns: "1/10"
2
3
3
5
Returns: "1/6"
2
3
4
4
Returns: "1/20"
2
3
4
5
Returns: "1/6"
2
3
5
5
Returns: "1/6"
2
4
2
5
Returns: "1/6"
2
4
3
4
Returns: "1/5"
2
4
3
5
Returns: "4/15"
2
4
4
5
Returns: "1/6"
2
4
5
5
Returns: "1/6"
2
5
2
5
Returns: "1/6"
2
5
3
5
Returns: "1/3"
2
5
4
5
Returns: "1/3"
2
5
5
5
Returns: "1/3"
3
0
3
5
Returns: "1/6"
3
0
4
5
Returns: "1/6"
3
0
5
5
Returns: "1/6"
3
1
3
5
Returns: "1/6"
3
1
4
5
Returns: "1/6"
3
1
5
5
Returns: "1/6"
3
2
3
5
Returns: "1/6"
3
2
4
5
Returns: "1/6"
3
2
5
5
Returns: "1/6"
3
3
3
5
Returns: "1/6"
3
3
4
4
Returns: "1/20"
3
3
4
5
Returns: "1/6"
3
3
5
4
Returns: "1/12"
3
3
5
5
Returns: "1/6"
3
4
3
5
Returns: "1/6"
3
4
4
4
Returns: "1/5"
3
4
4
5
Returns: "7/30"
3
4
5
5
Returns: "1/6"
3
5
3
5
Returns: "1/6"
3
5
4
5
Returns: "1/3"
3
5
5
5
Returns: "1/3"
4
0
4
5
Returns: "1/6"
4
0
5
5
Returns: "1/6"
4
1
4
5
Returns: "1/6"
4
1
5
5
Returns: "1/6"
4
2
4
5
Returns: "1/6"
4
2
5
5
Returns: "1/6"
4
3
4
5
Returns: "1/6"
4
3
5
5
Returns: "1/6"
4
4
4
5
Returns: "1/6"
4
4
5
4
Returns: "1/5"
4
4
5
5
Returns: "1/5"
4
5
4
5
Returns: "1/6"
4
5
5
5
Returns: "1/3"
5
0
5
5
Returns: "1/6"
5
1
5
5
Returns: "1/6"
5
2
5
5
Returns: "1/6"
5
3
5
5
Returns: "1/6"
5
4
5
5
Returns: "1/6"
5
5
5
5
Returns: "1/6"
4
4
5
2
Returns: "1/30"