Problem Statement
Given an arbitrary number of linear equality equations using an arbitrary (up to 5) number of variables, return the number of distinct possible solutions to the set of equations.
If a set of equations uses the variables (x1, x2, ... xn), a solution is a set of values (r1, r2, ... rn) such that substituting the value ri for the variable xi for all i in all equations results in all the equations evaluating to true equalities.
The number of solutions will always be 0, 1, or infinity. For infinity, return the value 10.
All equations will follow the following grammar:
<EQ> -> <SIDE> "=" <SIDE>
<SIDE> -> integer variable <MORE_VAR_LIST> | integer <MORE_VAR_LIST>
<MORE_VAR_LIST> -> "+" integer variable <MORE_VAR_LIST> | "+" integer <MORE_VAR_LIST> | nil.
Where integer is an integer value, like "23" or "-4" (no space between the negative sign and number) and variable is a single lowercase letter ('a' - 'z'). There can be an arbitrary amount of whitespace between integers, variables, "=" and "+". Leading zeros are allowed in integers, and the integers can range from -10 to 10, inclusive.
For example, an equation might be "03 + 02x = 4y" or "10x + 3y + 2 x = -010".
Definition
- Class:
- LinAlg
- Method:
- howMany
- Parameters:
- String[]
- Returns:
- int
- Method signature:
- int howMany(String[] equations)
- (be sure your method is public)
Notes
- If a set of equations contains an equation that cannot possibly be satisfied (like "3 + 4 = 2"), there are no solutions.
Constraints
- equations will contain between 1 and 50, inclusive, elements.
- Each element of equations will follow the grammar given above.
- Each element of equations will have maximum length of 50.
- No integer in equations will be greater than 10 or less than -10.
- There will be at least 1 variable in equations.
- There will be at most 5 variables used in equations.
Examples
{"02x+05y+9x+7z=1x", "10x=5"}
Returns: 10
The value of x is fixed at .5, but y and z depend on each other so there are infinitely many solutions.
{"2x+4y=3y", "2x+-04y=2"}
Returns: 1
This has exactly one solution, x=.2, y=-.4
{"4a+5b+6c+7d+8e=10", "10=9a+5b+7d+8e", "1=-3a+-2b+-3c+-10d+-5e", "2a+5b=7d+10e", "9=0a+7b+10c+3d+5e"}
Returns: 1
{"4a+5b+6c+7d+8e=10", "10=9a+5b+7d+8e", "2=-3a+-2b+-3c+-10d+-5e", "2a+5b=7d+9e", "9=0a+7b+10c+3d+5e"}
Returns: 1
{"4a+5b+6c+7d+8e=10", "10=9a+5b+7d+8e", "2=-3a+-2b+-3c+-10d+-5e", "2a+5b=7d+10e", "9=0a+7b+10c+3d+5e", "9=0a+7b+10c+3d+5e"}
Returns: 1
{"1x=2", "1x=3"}
Returns: 0
Clearly, there is no solution.
{"1 x+1 y=0"}
Returns: 10
There are infinitely many solutions. For example (0, 0), (-1, 1), etc...
{"1a + 8b + 1z= 1", "1b + 8c + 1z= 1", "1c + 8d + 1z= 1", "1a+1b+1c+1d+1z=1", "1z+1d=1", "1z=1"}
Returns: 1
{ "1a + 10b = 0", "1b + 10c = 0", "1c + 10d = 0", "1d + 10j = 0", "1j = 10" }
Returns: 1
{"10a=1", "10b = 1a", "10c = 1b", "10d = 1c", "10j = 1d" }
Returns: 1
{ "10b = 1a", "10c = 1b", "10d = 1c", "10e = 1d", "10a+1e=1" }
Returns: 1
{ "10a+10b+10c+10e=1", "10a=1b", "10b=1c", "10c=1d", "10d=1e" }
Returns: 1
{ "10a+10b+10c+10e=1", "10a=1b", "10b=1c", "10c=1d", "10d=1e", "9a+10b+10c+10e=1" }
Returns: 0
{"1+1+1+1=4","1x=1x"}
Returns: 10
{"1x=1", "0x=0", "-1x=-1"}
Returns: 1
{"-8a+-7b+-7c+2d+0e=-6","2a+3b+-8c+-5d+-5e=2","8a+7b+-3c+-3d+-4e=7","0a+4b+-2c+-6d+-7e=9","6a+1b+-9c+-1d+4e=9"}
Returns: 1
{"-8a+7b+-9c+5d+0e=-5","1a+-6b+-4c+5d+8e=5","-2a+4b+-3c+6d+1e=3","-9a+0b+4c+-8d+5e=-4","1a+-9b+7c+2d+0e=0"}
Returns: 1
{"6a+10b+0c+6d+-2e=6","1a+-1b+-4c+-2d+6e=2","7a+-3b+0c+10d+2e=8","5a+-1b+-8c+-8d+5e=1","-7a+-9b+-5c+3d+1e=9"}
Returns: 1
{"-6a+-3b+2c+-8d+-5e=-7","-5a+4b+-6c+8d+9e=5","0a+6b+-5c+1d+5e=8","0a+10b+-5c+2d+-6e=-6","-3a+3b+5c+0d+-2e=-4"}
Returns: 1
{"-3a+2b+0c+-2d+-5e=-1","-9a+-3b+-5c+7d+-4e=3","-6a+-8b+-2c+-1d+1e=-7","3a+-1b+2c+0d+9e=2","9a+4b+8c+-3d+-9e=-3"}
Returns: 1
{"-2a+1b+-4c+-2d+1e=3","0a+4b+1c+7d+-5e=4","1a+2b+5c+-5d+-4e=-5","5a+5b+7c+1d+-6e=8","-7a+8b+2c+-4d+-4e=1"}
Returns: 1
{"5a+-8b+-8c+0d+-9e=6","9a+8b+-1c+9d+6e=6","-9a+7b+0c+5d+-9e=-2","-1a+4b+0c+-5d+2e=3","5a+9b+0c+4d+8e=-6"}
Returns: 1
{"-9a+4b+2c+7d+5e=8","5a+4b+10c+-1d+-4e=8","6a+8b+2c+1d+1e=10","7a+-8b+-5c+1d+4e=-8","0a+-9b+10c+4d+0e=-8"}
Returns: 1
{"-3a+-2b+1c+0d+-8e=-4","5a+7b+2c+-1d+-8e=5","-6a+-9b+5c+-2d+-2e=-6","8a+6b+-9c+7d+-4e=-1","-7a+-7b+2c+-5d+-1e=-2"}
Returns: 1
{"9a+-4b+4c+3d+-5e=3","-3a+-7b+6c+0d+-7e=-9","1a+8b+0c+0d+-8e=3","10a+-3b+4c+7d+8e=1","4a+7b+3c+3d+5e=-9"}
Returns: 1
{"4a+4b+10c+10d+8e=-5","0a+-9b+1c+-7d+-5e=-2","-8a+-4b+-2c+0d+0e=3","9a+6b+10c+7d+7e=7","-2a+5b+4c+-1d+0e=-1"}
Returns: 1
{"-7a+-9b+-5c+-8d+-7e=-2","4a+2b+6c+-6d+0e=-4","-9a+-3b+3c+7d+4e=8","-8a+3b+-9c+0d+-8e=-1","-2a+7b+9c+0d+-4e=-2"}
Returns: 1
{"-7a+-5b+-7c+-1d+4e=-9","-1a+8b+-3c+0d+0e=7","-7a+0b+-3c+-1d+0e=-8","7a+-3b+-3c+-3d+0e=-7","0a+7b+4c+0d+-4e=-8"}
Returns: 1
{"-3a+-9b+-6c+4d+-2e=7","-9a+-3b+0c+4d+2e=-4","5a+1b+8c+10d+5e=4","0a+7b+1c+1d+2e=-6","-4a+-4b+-2c+0d+9e=9"}
Returns: 1
{"0a+-1b+8c+-9d+1e=-8","10a+6b+7c+-9d+6e=-6","8a+-7b+-9c+-1d+5e=1","10a+-7b+0c+0d+-2e=-6","-6a+-8b+-3c+-5d+10e=9"}
Returns: 1
{"-6a+0b+0c+-1d+6e=-1","6a+4b+-2c+7d+1e=-1","-3a+1b+-9c+-2d+6e=-7","6a+8b+-7c+-7d+0e=-5","-2a+9b+0c+0d+2e=9"}
Returns: 1
{"4a+4b+-1c+8d+7e=1","-3a+-9b+-9c+-6d+5e=5","-2a+-7b+0c+-9d+4e=10","-3a+-5b+-7c+2d+8e=10","3a+7b+-9c+7d+-7e=2"}
Returns: 1
{"8a+-7b+-4c+4d+0e=9","-2a+-8b+-5c+-2d+0e=-2","0a+-8b+-8c+7d+-8e=-9","4a+-3b+7c+4d+3e=-6","0a+5b+-8c+-1d+1e=-6"}
Returns: 1
{"10a+0b+-6c+7d+0e=0","-3a+8b+-1c+9d+-5e=-3","-9a+-7b+-6c+4d+0e=7","6a+4b+6c+-4d+9e=7","0a+-1b+-2c+-3d+2e=0"}
Returns: 1
{"-4a+9b+0c+-5d+10e=7","-6a+7b+2c+0d+-3e=-4","-5a+2b+0c+4d+0e=-7","0a+-7b+3c+4d+6e=-5","-6a+-7b+3c+7d+1e=6"}
Returns: 1
{"6a+-1b+-4c+-2d+-6e=6","-8a+3b+-7c+5d+-4e=10","10a+-4b+0c+-9d+-4e=-6","4a+-4b+-5c+6d+10e=-5","3a+-5b+-9c+4d+0e=3"}
Returns: 1
{"8a+10b+-4c+7d+-3e=6","3a+8b+2c+2d+1e=5","5a+-9b+8c+8d+-1e=-1","-4a+-9b+-9c+0d+6e=-7","0a+-5b+-9c+8d+7e=5"}
Returns: 1
{"8a+3b+9c+-4d+-3e=2","-4a+9b+0c+7d+-5e=-1","6a+9b+-8c+5d+10e=-6","6a+-4b+-2c+-4d+4e=4","-1a+7b+4c+8d+-8e=-2"}
Returns: 1
{"0a+0b+2c+5d+-1e=5","0a+-9b+-3c+10d+4e=-4","1a+2b+-9c+9d+0e=-9","-2a+3b+2c+-6d+-4e=4","5a+-6b+-9c+5d+-4e=2"}
Returns: 1
{"-2a+6b+5c+-9d+6e=-4","-8a+-3b+-9c+8d+4e=-3","0a+0b+10c+1d+0e=6","-7a+2b+6c+10d+0e=-3","7a+-5b+3c+5d+-9e=-7"}
Returns: 1
{"-6a+6b+-7c+0d+-1e=7","0a+-9b+-1c+5d+7e=-2","5a+0b+0c+5d+0e=0","8a+9b+-7c+0d+2e=-8","10a+8b+-1c+2d+2e=-3"}
Returns: 1
{"-7a+-6b+4c+-7d+5e=-5","-6a+-7b+-7c+-6d+8e=8","-8a+3b+10c+-5d+5e=3","-6a+-9b+4c+6d+3e=1","8a+-9b+8c+0d+2e=0"}
Returns: 1
{"3a+6b+0c+8d+3e=-4","2a+3b+-5c+4d+-2e=4","-2a+-5b+-5c+-6d+1e=5","-6a+-1b+-2c+5d+1e=-3","6a+3b+8c+5d+3e=4"}
Returns: 1
{"-7a+3b+-4c+2d+-1e=8","-5a+0b+7c+-4d+6e=-6","5a+5b+6c+-8d+7e=8","-6a+0b+5c+5d+2e=-9","9a+7b+8c+2d+0e=0"}
Returns: 1
{"-8a+-3b+10c+-1d+-1e=2","10a+6b+0c+1d+9e=-5","-9a+-9b+5c+6d+10e=-9","10a+6b+3c+6d+-9e=-5","1a+-1b+4c+1d+9e=4"}
Returns: 1
{"0a+9b+3c+-2d+-9e=-4","-4a+7b+6c+3d+9e=0","9a+7b+-5c+-6d+-3e=-3","-9a+9b+8c+-9d+0e=-4","-2a+-7b+-6c+2d+7e=0"}
Returns: 1
{"2a+-2b+-3c+-1d+1e=0","-1a+-7b+6c+9d+1e=5","0a+-2b+-5c+8d+10e=-9","0a+-1b+0c+9d+0e=4","9a+8b+-3c+9d+-4e=1"}
Returns: 1
{"10a+0b+3c+-9d+6e=-8","-1a+9b+5c+-6d+-4e=0","-6a+0b+-6c+4d+3e=4","-8a+-5b+10c+-7d+-8e=6","6a+-2b+-6c+8d+10e=9"}
Returns: 1
{"-5a+10b+7c+8d+-9e=-1","-1a+8b+8c+-8d+-6e=3","-9a+6b+4c+9d+-5e=-7","2a+6b+-3c+-7d+2e=0","5a+-1b+9c+0d+5e=-4"}
Returns: 1
{"-9a+-7b+7c+6d+0e=8","3a+9b+3c+-2d+9e=-7","5a+0b+0c+-8d+-3e=8","4a+6b+4c+0d+0e=-5","0a+-1b+5c+6d+6e=2"}
Returns: 1
{"-6a+-6b+7c+-5d+5e=-5","9a+6b+2c+-6d+8e=9","7a+-8b+-5c+10d+5e=-4","-2a+-9b+-4c+7d+-2e=-3","8a+-8b+1c+-8d+9e=-8"}
Returns: 1
{"-9a+9b+-7c+-4d+4e=-4","7a+5b+-9c+6d+6e=-8","3a+-5b+-8c+10d+9e=2","7a+10b+8c+3d+5e=-5","6a+7b+-9c+-4d+3e=-1"}
Returns: 1
{"3a+3b+4c+-5d+-4e=-8","-2a+9b+7c+5d+0e=4","5a+10b+3c+5d+5e=-6","10a+8b+4c+8d+0e=-9","3a+0b+-1c+0d+-3e=5"}
Returns: 1
{"2a+-7b+-1c+-7d+10e=10","-8a+-5b+-8c+5d+1e=5","0a+-3b+-1c+-7d+-1e=10","9a+-4b+3c+1d+-4e=6","8a+10b+4c+0d+-5e=-5"}
Returns: 1
{"-2a+-2b+-5c+0d+-4e=7","0a+-1b+-5c+-7d+0e=8","7a+6b+9c+5d+1e=-8","0a+-2b+5c+9d+-7e=-4","4a+-9b+5c+-1d+7e=1"}
Returns: 1
{"0a+4b+-3c+2d+-2e=7","-6a+-9b+-5c+4d+6e=6","10a+8b+-5c+-6d+6e=10","-3a+-8b+5c+-9d+10e=-6","-2a+7b+-9c+6d+2e=2"}
Returns: 1
{"-8a+-5b+6c+-6d+-1e=5","4a+-9b+0c+-3d+-2e=-7","-5a+-8b+1c+8d+1e=-7","4a+9b+7c+6d+-2e=-8","10a+4b+-3c+8d+-9e=8"}
Returns: 1
{"6a+-6b+-5c+0d+0e=5","10a+-8b+-1c+-2d+-5e=-9","10a+3b+-8c+3d+-6e=10","-7a+-7b+5c+0d+-1e=10","-5a+9b+0c+4d+-2e=-1"}
Returns: 1
{"-9a+4b+-1c+4d+10e=9","3a+-4b+0c+1d+-7e=0","4a+-7b+-4c+10d+-6e=-5","-3a+6b+4c+-4d+8e=8","0a+-6b+2c+-6d+-7e=6"}
Returns: 1
{"10a+3b+3c+0d+0e=2","-2a+-3b+0c+-7d+-9e=0","-2a+10b+2c+0d+-2e=-1","-2a+6b+10c+-2d+-6e=8","5a+3b+3c+0d+-9e=-3"}
Returns: 1
{"5a+-4b+3c+4d+9e=8","0a+9b+-5c+-5d+5e=-9","5a+-1b+8c+2d+-8e=6","5a+0b+8c+-5d+0e=-3","-7a+-1b+10c+-7d+7e=4"}
Returns: 1
{"0a+-5b+-2c+-3d+-6e=0","2a+1b+10c+5d+-5e=-4","0a+7b+-9c+10d+1e=-5","10a+2b+10c+-7d+-1e=-4","-7a+-3b+9c+0d+0e=8"}
Returns: 1
{"3a+-9b+5c+-8d+-5e=-7","6a+6b+4c+-5d+2e=1","5a+-8b+-8c+-7d+-1e=6","-2a+-9b+8c+8d+6e=9","-3a+-1b+0c+0d+10e=1"}
Returns: 1
{"9a+10b+4c+0d+-9e=7","8a+0b+-4c+-4d+-5e=9","-3a+-7b+0c+-7d+-3e=0","9a+4b+4c+5d+4e=-9","3a+-9b+-7c+2d+1e=-3"}
Returns: 1
{"-7a+-4b+6c+6d+5e=10","-8a+-4b+-8c+-7d+0e=-1","1a+-1b+9c+-2d+8e=-4","-6a+-3b+9c+2d+7e=9","9a+0b+4c+1d+-8e=0"}
Returns: 1
{"1x=1y","1y=1z","1x=1z","1x+1y=1y+1z"}
Returns: 10
{"1x=1y","1y=1z","1x=1z","1x+1y=1y+1z","1x+1y=2"}
Returns: 1
{"1x=1y","1y=1z","1x=1z","1x+1y=1y+1z","1x+1y=1z"}
Returns: 1
{"8a+-6b+0c+0d+0e=10","9a+9b+6c+4d+-7e=7","0a+5b+-1c+-1d+-5e=-4","0a+0b+-3c+-6d+7e=3","-8a+0b+0c+0d+2e=2","-7a+-1b+4c+-4d+4e=3"}
Returns: 0
{"1x+1z=1","1z=0","1x=0"}
Returns: 0
{ "2x+3y=5", "3x+2y=5", "5x+5y=10" }
Returns: 1
{ "2x+3y=2", "4x+6y=4" }
Returns: 10
{ "1a + 1b = 1", "1a + 2b = 1" }
Returns: 1
{ "2x + -04y = 2 ", "2x + 4y = 3y " }
Returns: 1