Problem Statement
You are given two line segments on the plane. Each segment is parallel to either the X axis or the Y axis. Your task is to figure out how the segments intersect and return one of the following strings:
- "NO", if the segments do not intersect
- "POINT", if the segments' intersection forms a point
- "SEGMENT", if the segments' intersection forms a line segment
The segments will be given as two int[]s s1 and s2. Each of them will contain four integers x1, y1, x2, y2 (in that order) where (x1, y1), (x2, y2) are segment endpoints.
Definition
- Class:
- Segments
- Method:
- intersection
- Parameters:
- int[], int[]
- Returns:
- String
- Method signature:
- String intersection(int[] s1, int[] s2)
- (be sure your method is public)
Constraints
- Each of s1 and s2 will contain exactly four elements
- All integers in s1 and s2 will be between -1000 and 1000, inclusive
- Each segment will be parallel to either the X axis or the Y axis
Examples
{0, 0, 0, 1}
{1, 0, 1, 1}
Returns: "NO"
The segments are parallel and there is no intersection.
{0, 0, 0, 1}
{0, 1, 0, 2}
Returns: "POINT"
The segments are located on the same line and have only one common point (0,1).
{0, -1, 0, 1}
{-1, 0, 1, 0}
Returns: "POINT"
The segments intersect at point (0,0).
{0, 0, 2, 0}
{1, 0, 10, 0}
Returns: "SEGMENT"
The segments have a common line segment from (1,0) to (2,0).
{5, 5, 5, 5}
{6, 6, 6, 6}
Returns: "NO"
These are two different points.
{ 5, 5, 5, 8 }
{ 5, 4, 5, 9 }
Returns: "SEGMENT"
{10, 0, -10, 0}
{5, 0, -5, 0}
Returns: "SEGMENT"
The segments have a common line segment from (-5,0) to (5,0).
{800, 1000, 800, 850}
{1000, 1000, -1000, 1000}
Returns: "POINT"
{10, 20, 10, 20}
{20, 10, 20, 10}
Returns: "NO"
{0, 0, 0, 0}
{10, 0, 0, 0}
Returns: "POINT"
{0, 0, 0, 10}
{0, 0, 0, 0}
Returns: "POINT"
{-788, -799, -600, -799}
{-100, -799, -1, -799}
Returns: "NO"
{-778, -799, -600, -799}
{-778, -799, -600, -799}
Returns: "SEGMENT"
{-788, -799, -600, -799}
{-700, -799, -600, -799}
Returns: "SEGMENT"
{-600, -799, -788, -799}
{-601, -799, -788, -799}
Returns: "SEGMENT"
{19, -19, 20, -19}
{20, 99, 20, 1000}
Returns: "NO"
{-5, 10, 78, 10}
{100, 10, 79, 10}
Returns: "NO"
{-5, 10, 78, 10}
{-999, 10, -10, 10}
Returns: "NO"
{10, -5, 10, 78}
{10, -90, 10, -80}
Returns: "NO"
{10, -5, 10, 78}
{10, 90, 10, 80}
Returns: "NO"
{123, 1000, 123, 433}
{888, 123, 751, 123}
Returns: "NO"
{987, 10, 987, 20}
{-987, 10, -987, 20}
Returns: "NO"
{50, 60, 100, 60}
{75, -1000, 75, 1000}
Returns: "POINT"
{50, 60, 100, 60}
{50, -1000, 50, 1000}
Returns: "POINT"
{50, 60, 100, 60}
{100, 1000, 100, -1000}
Returns: "POINT"
{50, 60, 100, 60}
{110, 60, 90, 60}
Returns: "SEGMENT"
{50, 60, 100, 60}
{110, 60, 60, 60}
Returns: "SEGMENT"
{50, 60, 100, 60}
{110, 60, 50, 60}
Returns: "SEGMENT"
{50, 60, 100, 60}
{110, 60, 40, 60}
Returns: "SEGMENT"
{0, 0, 0, 0 }
{0, 0, 0, -5 }
Returns: "POINT"
{0, 0, 2, 0 }
{1, 0, 10, 0 }
Returns: "SEGMENT"
{0, 0, 0, 1 }
{0, 1, 0, 2 }
Returns: "POINT"
{0, 0, 0, 0 }
{0, 0, 0, 0 }
Returns: "POINT"
{-10, 0, 10, 0 }
{-10, 0, -10, 10 }
Returns: "POINT"
{0, 1, 0, 0 }
{0, -10, 0, 10 }
Returns: "SEGMENT"
{10, 0, -10, 0 }
{5, 0, -5, 0 }
Returns: "SEGMENT"
{1, 1, 1, 3 }
{1, 2, 1, 3 }
Returns: "SEGMENT"
{-1000, -1000, 1000, -1000 }
{-1000, -1000, 1000, -1000 }
Returns: "SEGMENT"
{0, 0, 0, 0 }
{-1, 0, 1, 0 }
Returns: "POINT"
{0, 0, 2, 0 }
{0, 0, 2, 0 }
Returns: "SEGMENT"
{0, -1, 0, 1 }
{1, -1, 0, -1 }
Returns: "POINT"
{0, 1, 0, 10 }
{0, 1, 0, 10 }
Returns: "SEGMENT"
{1, 1, 1, 2 }
{0, 2, 0, 4 }
Returns: "NO"
{1, 1, 1, 3 }
{1, 1, 1, 3 }
Returns: "SEGMENT"
{0, -1, 0, 1 }
{-1, 0, 1, 0 }
Returns: "POINT"
{0, 0, 0, 1 }
{0, 2, 0, 3 }
Returns: "NO"
{0, 0, 10, 0 }
{10, 0, 0, 0 }
Returns: "SEGMENT"
{4, 0, 4, 0 }
{5, 0, 3, 0 }
Returns: "POINT"
{1, 1, 1, 2 }
{0, 1, 2, 1 }
Returns: "POINT"
{3, 3, 3, 3 }
{4, 4, 4, 4 }
Returns: "NO"
{1, 2, 1, 5 }
{1, 5, 1, 9 }
Returns: "POINT"
{10, 0, 9, 0 }
{5, 0, -5, 0 }
Returns: "NO"
{1, 2, 1, 4 }
{1, 2, 1, -2 }
Returns: "POINT"
{0, 0, 0, 2 }
{0, 1, 0, 1 }
Returns: "POINT"
{0, 0, 1, 0 }
{0, 12, 1, 12 }
Returns: "NO"
{0, 5, 10, 5 }
{10, 5, 20, 5 }
Returns: "POINT"
{0, 10, 0, 2 }
{1, 5, 10, 5 }
Returns: "NO"
{0, 1, 0, 2 }
{0, 0, 0, 1 }
Returns: "POINT"
{10, 0, -10, 0 }
{0, 0, 0, 0 }
Returns: "POINT"
{2, 3, 2, 5 }
{2, 7, 2, 10 }
Returns: "NO"
{0, 0, 0, 1 }
{0, 0, -1, 0 }
Returns: "POINT"
{0, -1, 0, 1 }
{-100, 0, -101, 0 }
Returns: "NO"
{2, 2, 2, 2 }
{2, 1, 2, 3 }
Returns: "POINT"
{0, 0, 10, 0 }
{0, 0, 10, 0 }
Returns: "SEGMENT"
{0, 3, 0, 10 }
{0, 0, 10, 0 }
Returns: "NO"
{0, 0, 0, 3 }
{0, 5, 0, 6 }
Returns: "NO"
{2, 1, 0, 1 }
{1, 0, 1, 3 }
Returns: "POINT"
{0, -10, 0, 10 }
{0, -10, 10, -10 }
Returns: "POINT"
{1, 1, 1, 1 }
{2, 1, 3, 1 }
Returns: "NO"