title: Solving Linear Equations & similar Algebra Problems with JavaScript
body: <p>I'm new to JavaScript and I am trying to write a simple script that solves linear equations. So far my script solves linear equations that are plus and minus only such as "2x + 28 - 18x = 36 - 4x + 10". I want it to also be able to solve linear equations/algebra problems that contain multiplication and division such as "2x * 3x = 4 / 2x". </p>
  
  <p>I kind of have an idea of what to do next but I think the script I have right now maybe overly complex and it's only going to make it more complicated to add the multiplication and division.</p>
  
  <p>Below is my script. I'm hoping for a few pointers on how I could improve and simplify what I already have and what the best way to add multiplication and division?</p>
  
  <p>My script on JS Bin: <a href="http://jsbin.com/ufekug/1/edit" rel="noreferrer">http://jsbin.com/ufekug/1/edit</a></p>
  
  <p>My script:</p>
  
  <pre><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
  &lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
  &lt;head&gt;
  &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
  &lt;title&gt;Problem Solver&lt;/title&gt;
  &lt;script&gt;
  window.onload = function() {
      // Total Xs on each side of equation
      // Example problem: 5x + 2 = 10 - 2x
      var leftSideXTotal = 0; // 5
      var rightSideXTotal = 0; // -2
  
      // Total integers on each side of equation
      // Example problem: 5x + 2 = 10 - 2x
      var leftSideIntTotal = 0; // 2
      var rightSideIntTotal = 0; // 10
  
  
      // Enter a math problem to solve
      var problem = "5x + 2 = 10 - 2x";
  
  
      // Remove all spaces in problem
      // Example problem: 5x + 2 = 10 - 2x
      problem = problem.replace(/\s/g,''); // 5x+2=10-2x
  
      // Add + signs in front of all - signs
      // Example problem: 5x + 2 = 10 - 2x
      problem = problem.replace(/-/gi, "+-"); // 5x+2=10+-2x
  
      // Split problem into left and right sides
      // Example problem: 5x + 2 = 10 - 2x
      var problemArray = problem.split("=");
      var problemLeftSide = problemArray[0]; // 5x+2
      var problemRightSide = problemArray[1]; // 10+-2x
  
      // Split values on each side into an array
      var problemLeftSideValues = problemLeftSide.split("+");
      var problemRightSideValues = problemRightSide.split("+");
  
      // Go through the left side values and add them up
      for (var i = 0; i &lt; problemLeftSideValues.length; i++) {
  
          // Current value
          var currentValue = problemLeftSideValues[i];
          // Length of current value
          var currentValueLength = currentValue.length;
  
          if (currentValue.charAt(currentValueLength - 1) == "x") { //Check if current value is a X value
  
              // Remove X from end of current value
              currentValue = currentValue.split("x");
  
              // Add to total Xs on left side
              leftSideXTotal = Number(leftSideXTotal) + Number(currentValue[0]);
  
          } else {
  
              // Add to total integers on left side
              leftSideIntTotal = Number(leftSideIntTotal) + Number(problemLeftSideValues[i]);
  
          }
      }
  
      // Go through the right side values and add them up
      for (var i = 0; i &lt; problemRightSideValues.length; i++) {
  
          // Current value
          var currentValue = problemRightSideValues[i];
          // Length of current value
          var currentValueLength = currentValue.length;
  
          if (currentValue.charAt(currentValueLength - 1) == "x") { //Check if current value is a X value
  
              // Remove X from end of current value
              currentValue = currentValue.split("x");
  
              // Add to total Xs on right side
              rightSideXTotal = Number(rightSideXTotal) + Number(currentValue[0]);
  
          } else {
  
              // Add to total integers on right side
              rightSideIntTotal = Number(rightSideIntTotal) + Number(problemRightSideValues[i]);
  
          }
      }
  
      // Compute
      var totalXs = (leftSideXTotal - rightSideXTotal)
      var totalIntegers = (rightSideIntTotal - leftSideIntTotal)
      var solution = (totalIntegers / totalXs)
  
      // Display solution
      document.getElementById("divSolution").innerText = solution;
  }
  &lt;/script&gt;
  &lt;/head&gt;
  
  &lt;body&gt;
  &lt;div id="divSolution"&gt;&lt;/div&gt;
  &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>