Problem Statement
A line of symmetry is a line through the cartesian plane such that if you reflect everything from one side of the line to the other, you still have the same image. For example, if the x-axis is a line of symmetry, it means that for every point (x,y) there is also a point (x,-y).
Your task is, given a list of points, determine how many such lines exist.
Definition
- Class:
- Symmetry
- Method:
- countLines
- Parameters:
- String[]
- Returns:
- int
- Method signature:
- int countLines(String[] points)
- (be sure your method is public)
Constraints
- Each element of points will be formatted as a list of x,y pairs "
...", where there is exactly one space between every two terms, and both and are integers. and will both be between -10,000 and 10,000, inclusive. - Each point will be unique.
- There will be between 2 and 200 points, inclusive.
Examples
{"0 100","100 0","0 0","100 100","51 51"}
Returns: 1
{"0 100","100 0","0 0","100 100","51 50"}
Returns: 1
{"0 100","100 0","0 0","100 100","50 50"}
Returns: 4
{"0 100","100 0","0 0","100 100","51 52"}
Returns: 0
{"1 0","0 1","-1 0","0 -1"}
Returns: 4
{"1 0","0 1","-1 0","0 -1","1 1","1 -1","-1 1","-1 -1"}
Returns: 4
{"0 0","2 1","1 3","-1 2"}
Returns: 4
{"0 100","100 0","0 0","100 100","51 51"}
Returns: 1
{"0 0","1 1","-1 1"}
Returns: 1
{"-10000 -10000","5906 -10000","-2047 3775"}
Returns: 1
{"1 1 1 -1 -1 1 -1 -1"}
Returns: 4
This looks something like this (where '-' and '|' represent the axes, and '*' represents a point): | | * | * | --------+-------- | * | * | | There are 4 lines of symmetry. Both axes are lines of symmetry, as are the line y = x and y = -x.
{"1 0 0 1 -1 0 0 -1"}
Returns: 4
{"0 0","1 1","-1 1"}
Returns: 1
{"0 0 2 1 0 5 -2 4"}
Returns: 2
{"1 0","0 1","-1 0","0 -1","1 1","1 -1","-1 1","-1 -1"}
Returns: 4
{"0 100 100 0","0 0 100 100","51 52"}
Returns: 0
{"0 0","100 0","50 87"}
Returns: 1
{"0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0", "0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1", "0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2", "0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 3", "0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4", "0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 5", "0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 6", "0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 7", "0 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 8", "0 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 9", "0 10 1 10 2 10 3 10 4 10 5 10 6 10 7 10 8 10 9 10", "0 11 1 11 2 11 3 11 4 11 5 11 6 11 7 11 8 11 9 11", "0 12 1 12 2 12 3 12 4 12 5 12 6 12 7 12 8 12 9 12", "0 13 1 13 2 13 3 13 4 13 5 13 6 13 7 13 8 13 9 13", "0 14 1 14 2 14 3 14 4 14 5 14 6 14 7 14 8 14 9 14", "0 15 1 15 2 15 3 15 4 15 5 15 6 15 7 15 8 15 9 15", "0 16 1 16 2 16 3 16 4 16 5 16 6 16 7 16 8 16 9 16", "0 17 1 17 2 17 3 17 4 17 5 17 6 17 7 17 8 17 9 17", "0 18 1 18 2 18 3 18 4 18 5 18 6 18 7 18 8 18 9 18", "0 19 1 19 2 19 3 19 4 19 5 19 6 19 7 19 8 19 9 19"}
Returns: 2
{"0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0", "0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1", "0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2", "0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 3", "0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4", "0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 5", "0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 6", "0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 7", "0 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 8", "0 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 9", "0 10 1 10 2 10 3 10 4 10 5 10 6 10 7 10 8 10 9 10", "0 11 1 11 2 11 3 11 4 11 5 11 6 11 7 11 8 11 9 11", "0 12 1 12 2 12 3 12 4 12 5 12 6 12 7 12 8 12 9 12", "0 13 1 13 2 13 3 13 4 13 5 13 6 13 7 13 8 13 9 13", "0 14 1 14 2 14 3 14 4 14 5 14 6 14 7 14 8 14 9 14", "0 15 1 15 2 15 3 15 4 15 5 15 6 15 7 15 8 15 9 15", "0 16 1 16 2 16 3 16 4 16 5 16 6 16 7 16 8 16 9 16", "0 17 1 17 2 17 3 17 4 17 5 17 6 17 7 17 8 17 9 17", "0 18 1 18 2 18 3 18 4 18 5 18 6 18 7 18 8 18 9 18", "0 19 1 19 2 19 3 19 4 19 5 19 6 19 7 19 8 19 10 19"}
Returns: 0
{"1 1 1 0"}
Returns: 2
{"-24 25 -24 -25 25 -24 -25 -24 -23 25 -23 -25", "25 -23 -25 -23 -22 25 -22 -25 25 -22 -25 -22 -21 25", "-21 -25 25 -21 -25 -21 -20 25 -20 -25 25 -20", "-25 -20 -19 25 -19 -25 25 -19 -25 -19 -18 25", "-18 -25 25 -18 -25 -18 -17 25 -17 -25 25 -17", "-25 -17 -16 25 -16 -25 25 -16 -25 -16 -15 25", "-15 -25 25 -15 -25 -15 -14 25 -14 -25 25 -14", "-25 -14 -13 25 -13 -25 25 -13 -25 -13 -12 25", "-12 -25 25 -12 -25 -12 -11 25 -11 -25 25 -11", "-25 -11 -10 25 -10 -25 25 -10 -25 -10 -9 25 -9 -25", "25 -9 -25 -9 -8 25 -8 -25 25 -8 -25 -8 -7 25 -7 -25", "25 -7 -25 -7 -6 25 -6 -25 25 -6 -25 -6 -5 25 -5 -25", "25 -5 -25 -5 -4 25 -4 -25 25 -4 -25 -4 -3 25 -3 -25", "25 -3 -25 -3 -2 25 -2 -25 25 -2 -25 -2 -1 25 -1 -25", "25 -1 -25 -1 0 25 0 -25 25 0 -25 0 1 25 1 -25 25 1", "-25 1 2 25 2 -25 25 2 -25 2 3 25 3 -25 25 3 -25 3", "4 25 4 -25 25 4 -25 4 5 25 5 -25 25 5 -25 5 6 25", "6 -25 25 6 -25 6 7 25 7 -25 25 7 -25 7 8 25 8 -25", "25 8 -25 8 9 25 9 -25 25 9 -25 9 10 25 10 -25 25 10", "-25 10 11 25 11 -25 25 11 -25 11 12 25 12 -25 25 12", "-25 12 13 25 13 -25 25 13 -25 13 14 25 14 -25 25 14", "-25 14 15 25 15 -25 25 15 -25 15 16 25 16 -25 25 16", "-25 16 17 25 17 -25 25 17 -25 17 18 25 18 -25 25 18", "-25 18 19 25 19 -25 25 19 -25 19 20 25 20 -25 25 20", "-25 20 21 25 21 -25 25 21 -25 21 22 25 22 -25 25 22", "-25 22 23 25 23 -25 25 23 -25 23 24 25 24 -25 25 24", "-25 24 25 25 25 -25 -25 25 -25 -25"}
Returns: 4
{"-2400 2500 -2400 -2500 2500 -2400 -2500 -2400", "-2300 2500 -2300 -2500 2500 -2300 -2500 -2300", "-2200 2500 -2200 -2500 2500 -2200 -2500 -2200", "-2100 2500 -2100 -2500 2500 -2100 -2500 -2100", "-2000 2500 -2000 -2500 2500 -2000 -2500 -2000", "-1900 2500 -1900 -2500 2500 -1900 -2500 -1900", "-1800 2500 -1800 -2500 2500 -1800 -2500 -1800", "-1700 2500 -1700 -2500 2500 -1700 -2500 -1700", "-1600 2500 -1600 -2500 2500 -1600 -2500 -1600", "-1500 2500 -1500 -2500 2500 -1500 -2500 -1500", "-1400 2500 -1400 -2500 2500 -1400 -2500 -1400", "-1300 2500 -1300 -2500 2500 -1300 -2500 -1300", "-1200 2500 -1200 -2500 2500 -1200 -2500 -1200", "-1100 2500 -1100 -2500 2500 -1100 -2500 -1100", "-1000 2500 -1000 -2500 2500 -1000 -2500 -1000", "-900 2500 -900 -2500 2500 -900 -2500 -900 -800 2500", "-800 -2500 2500 -800 -2500 -800 -700 2500", "-700 -2500 2500 -700 -2500 -700 -600 2500", "-600 -2500 2500 -600 -2500 -600 -500 2500", "-500 -2500 2500 -500 -2500 -500 -400 2500", "-400 -2500 2500 -400 -2500 -400 -300 2500", "-300 -2500 2500 -300 -2500 -300 -200 2500", "-200 -2500 2500 -200 -2500 -200 -100 2500", "-100 -2500 2500 -100 -2500 -100 0 2500 0 -2500", "2500 0 -2500 0 100 2500 100 -2500 2500 100", "-2500 100 200 2500 200 -2500 2500 200 -2500 200", "300 2500 300 -2500 2500 300 -2500 300 400 2500", "400 -2500 2500 400 -2500 400 500 2500 500 -2500", "2500 500 -2500 500 600 2500 600 -2500 2500 600", "-2500 600 700 2500 700 -2500 2500 700 -2500 700", "800 2500 800 -2500 2500 800 -2500 800 900 2500", "900 -2500 2500 900 -2500 900 1000 2500 1000 -2500", "2500 1000 -2500 1000 1100 2500 1100 -2500 2500 1100", "-2500 1100 1200 2500 1200 -2500 2500 1200", "-2500 1200 1300 2500 1300 -2500 2500 1300", "-2500 1300 1400 2500 1400 -2500 2500 1400", "-2500 1400 1500 2500 1500 -2500 2500 1500", "-2500 1500 1600 2500 1600 -2500 2500 1600", "-2500 1600 1700 2500 1700 -2500 2500 1700", "-2500 1700 1800 2500 1800 -2500 2500 1800", "-2500 1800 1900 2500 1900 -2500 2500 1900", "-2500 1900 2000 2500 2000 -2500 2500 2000", "-2500 2000 2100 2500 2100 -2500 2500 2100", "-2500 2100 2200 2500 2200 -2500 2500 2200", "-2500 2200 2300 2500 2300 -2500 2500 2300", "-2500 2300 2400 2500 2400 -2500 2500 2400", "-2500 2400"}
Returns: 4
{"8 10 9 10 10 8 10 9","-8 10 -9 10 -10 8 -10 9","-8 -10 -9 -10 -10 -8 -10 -9","8 -10 9 -10 10 -8 10 -9"}
Returns: 4
{"9999 10000 -10000 -10000 9998 9999"}
Returns: 0
{"9999 10000 -10000 -10000 10000 -10000 -10000 10000"}
Returns: 0
{"9999 10000 -10000 -10000 10000 -10000 -10000 10000"}
Returns: 0
{ "0 0 0 1 0 4" }
Returns: 1
{ "0 0 1 0 2 0 3 0 4 0" }
Returns: 2
{ "0 0 1 1" }
Returns: 2
{ "0 0 0 1 0 -1" }
Returns: 2
{ "0 0 1 1 2 2" }
Returns: 2
{ "1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9", "2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9", "3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9", "4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9", "5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9", "6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9", "7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9", "8 0 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9", "9 0 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9", "10 0 10 1 10 2 10 3 10 4 10 5 10 6 10 7 10 8 10 9", "11 0 11 1 11 2 11 3 11 4 11 5 11 6 11 7 11 8 11 9", "12 0 12 1 12 2 12 3 12 4 12 5 12 6 12 7 12 8 12 9", "13 0 13 1 13 2 13 3 13 4 13 5 13 6 13 7 13 8 13 9", "14 0 14 1 14 2 14 3 14 4 14 5 14 6 14 7 14 8 14 9", "15 0 15 1 15 2 15 3 15 4 15 5 15 6 15 7 15 8 15 9", "16 0 16 1 16 2 16 3 16 4 16 5 16 6 16 7 16 8 16 9", "17 0 17 1 17 2 17 3 17 4 17 5 17 6 17 7 17 8 17 9", "18 0 18 1 18 2 18 3 18 4 18 5 18 6 18 7 18 8 18 9", "19 0 19 1 19 2 19 3 19 4 19 5 19 6 19 7 19 8 19 9" }
Returns: 2