如何评价简单代数运算的难度

问题描述:

我正在写一个简单的应用程序来帮助我的女儿练习基本代数(一年级)。例如,我想根据操作的难度给每个响应分配一个分数,其中2 + 2的值小于12-7。 您是否知道现有的算法可以查找并适应我的需求?如何评价简单代数运算的难度

编辑

**编辑← **

试图

  • 使问题更具体;)

    给出两个整数和一个基本的代数运算

    算法输入:int a,bstring operation

    算法输出:float difficulty

    →有什么可以帮助推断难系数的因素是什么?

    • 我一定会看看输入的数字,他们的距离可以是 在确定操作的复杂性很重要。 10 + 1显然比7 + 5更容易,因为(当不记忆并立即响应)需要更长的计数时间;
    • 作为对前面陈述的修正,常见/简单的论点应该会降低操作的复杂度:0或10是一个很好的例子;
  • +3

    这里来了倒票。 :(这不是我们可以回答的问题的类型,它的意见基础。太宽了。 – magreenberg

    我不知道任何算法来找到一个方程的“困难”,但如果我有更多的时间,我可能会尝试玩弄像this ......即使它是阅读,这个概念可能适用于算术。

    无论如何,这里是一个超级无聊后午夜裂缝的东西,可能与一些调整极其基本算术。你可以调整因素/重量,但这可能会让你开始。祝你好运!

    function get_difficulty (eq) { 
        var difficulty = 0; 
        var settings = { 
         terms_factor : 3, //Multiply by the number of terms in an equation 
         digits_factor : 2, //Multiply by the number of digits in each term 
         negative_weight : 2, //Add this if subtracting two numbers in the equation yields a negative number 
    
         operations : { 
          "+" : 1, 
          "-" : 2, 
          "*" : 4, 
          "/" : 6, 
    
          "=" : 0 
         } 
        }; 
    
        eq += "="; 
    
        var ptr = 0; 
        var terms = 0; 
        var prev_term = null; 
        var len = eq.length; 
        var stack = [ ]; 
    
        var is_numeric = function (n) { 
         return /\d+/.test (n); //Not a brilliant way but works for basic arithmetic 
        }; 
    
        while (ptr < len) { 
         var tok = eq [ptr]; 
    
         if (tok !== " " && tok !== "(" && tok !== ")") { 
          if (is_numeric (tok)) { 
           stack.push (tok); 
          } else if (tok in settings.operations) { 
           var curr_term = parseInt (stack.join ("")); 
           if (prev_term !== null && curr_term > prev_term && ["-", "="].indexOf (tok) !== -1) { 
            difficulty += settings.negative_weight; 
           } 
    
           difficulty += stack.length * settings.digits_factor; 
           prev_term = curr_term; 
           stack = [ ]; 
           terms++; 
    
           difficulty += settings.operations [tok]; 
          } else { 
           console.log ("Unknown token: " + tok); 
          } 
         } 
    
         ptr++; 
        } 
    
        difficulty += terms * settings.terms_factor; 
    
        return difficulty; 
    } 
    
    
    console.log (get_difficulty (" 2 + 2 ")); //11 
    console.log (get_difficulty (" 12 - 7 ")); //14 
    console.log (get_difficulty (" 7 - 12 ")); //16 
    console.log (get_difficulty (" 5 - 5 ")); //12 
    console.log (get_difficulty (" 5 - 1205 ")); //20 
    console.log (get_difficulty (" 5 - 1205 * 35 ")); //29 
    console.log (get_difficulty (" 5 * 40 ")); //18 
    console.log (get_difficulty (" 102 - 5/13 + 32 ")); //39 
    console.log (get_difficulty (" 100 - 100 ")); //20 
    console.log (get_difficulty (" 32 - 12 ")); //16 
    console.log (get_difficulty (" 12 - 32 ")); //18 
    
    +0

    这是比我期待的方式:) – mekdigital

    +0

    高兴地帮助:) – Anders