Как можно реализовать решение линеных уравнений

Поддержка
  • Как можно решать линейные уравнения? Самые простые где 2 числа, неизвестное и + - * /

    типа
    6*X=14
    X+2=80
    12+15=X

  • @vaxab23111 Простой способ: переместите X в одну сторону выражения.
    X = 14/6
    X = 80 - 2
    X = 12+15
    Screenshot_3.png

  • @vaxab23111
    Первое что пришло в голову

    var task = "X+2=80";
    var task_temp = '';
    var task_arr = [];
    for (var i = 0; i < task.length; i++) {
        var ch = task[i]
        if (/[0-9]/i.test(ch)) {
            task_temp += ch;
        } else {
            if (task_temp != '') {
                task_arr.push(task_temp);
                task_temp = '';
            }
            task_arr.push(ch);
        }
    }
    if (task_temp != '') {
        task_arr.push(task_temp);
    }
    var reversed = {
        "+":"-",
        "-":"+",
        "*":"/",
        "/":"*",
        
    }
    switch(task_arr.indexOf("X")){
        case 0: {
            task = task_arr[4]+reversed[task_arr[1]]+task_arr[2];
            break;
        }
        case 2: {
            task = task_arr[4]+reversed[task_arr[1]]+task_arr[0];
            break;
        }
        case 4: {
            task = task_arr.join("").replace("=X",'');
            break;
        }
    }
    eval("var result="+task)
    [[A]]=Math.round(result)
    
    
  • @vaxab23111 Тоже решил поучавствовать на разминки мозга, на 100% не претендует

    function getCooficient(exp) {
      var matched = exp.match(/(\d+)[\s*+-/]*[A-z]/)
      if (matched) {
        return parseFloat(matched.pop())
      }
      return 1
    }
    
    function evalSide(exp) {
      var cleanExp = exp.replace(/\d*[\s*+-/]*[A-z]/, '')
      if (!cleanExp) return 0
      return  eval(cleanExp)
    }
    
    function invertResult(num) {
        return num > 0? -num : num
    }
      
    function solveEquation(equation) {
      var parts = equation.split("=")
      var leftSide = parts[0].trim()
      var rightSide = parts[1].trim()
      
      var coefficient = 1
      var leftSideResult = evalSide(leftSide)
      var rightSideResult = evalSide(rightSide)
      
      if (/[A-z]/.test(leftSide)) {
        var coefficient = getCooficient(leftSide)
        leftSideResult = invertResult(leftSideResult)
      } else { 
        var coefficient = getCooficient(rightSide)
        rightSideResult = invertResult(rightSideResult)
      }
      return (leftSideResult + rightSideResult) / coefficient
    }
    
    log(solveEquation("6 * X=14")); // выводит 2.3333333333333335
    log(solveEquation("X+2=80")); // выводит 78
    log(solveEquation("12+15=X")); // выводит 27
    log(solveEquation("6 *X + 2=14")); // выводит 2
    log(solveEquation("X+2 * 2=80")); // выводит 76
    log(solveEquation("12+15/5=X")); // выводит 15
    
    [[BAS_VARIABLE]] =  solveEquation("6 * X=14")