使用javascript计算字母,直到您获得特定的数字

时间:2014-05-26 17:42:30

标签: javascript

我需要你帮助一个js。 我有一个文本框,我已经写了一个脚本来检测每个文本框中有多少个字母(例如,单词"你好"有1H - 1E - 2L -1O)

$(function () {
        var text = $('#testWords').text(); 
        var hCount = text.split('h').length - 1;          
        var eCount = text.split('e').length - 1;
        var lCount = text.split('l').length - 1;           
        var oCount = text.split('o').length - 1;            

        $('#output').html(
            'words count:
             </br>H - ' + lCount +             
            '</br>E - ' + oCount +             
            '</br>L - ' + vCount +
            '</br>O - ' + vCount});

因此我从字母数中获得了数字1120。 我需要的是以这种方式对字母求和:

  • 1120(你好,字母结果编号)

(1 + 1) - (1 + 2) - (2 + 0)

(H + E) - (E + L) - (L + O)

我知道我可以使用js语法添加一个简单的和,但问题是我需要保持总和,直到我只保留两个数字,例如,如果我在这里有这个数字代码:

  

126876

总和将是

  

1 + 2 - 2 + 6 - 6 + 8 - 8 + 7 - 7 + 6

     

3 - 8 - 14 - 15 - 13(结果)

所以接下来的总和是

  

3 + 8 - 8 + 1 - 4 + 1 - 5 + 1 3

将双数分成单个,依此类推,直到所有和结果只是0到99之间的数字

我希望我能以一种简单的方式解释我的问题,而且有人可以帮我解决这个问题。

而且,如果有人为我所做的代码提出建议或改进,请告诉我。

非常感谢 欢呼声

也许为了简单起见,我需要将88这样的数字分成8和8,然后将最后一个与第一个相加,依此类推

1 个答案:

答案 0 :(得分:1)

首先,您的代码中有一些我不理解的内容:您如何从1120进入hello?永远不应该有0,如果我理解你的逻辑,那应该是1121。

话虽如此,我确实试了一下,这就是我想出的: http://jsfiddle.net/75fyZ/3/

正如您将注意到我对您的代码进行了一些优化(分裂的东西真的很难看,而且会产生错误的结果)。完整的代码(包括一些助手和接口逻辑)是小提琴,但主要的逻辑在这里:

function calculateMagicNumber(text) {
    // count the chars - return s something like {'h':1,'l':2,'o':1}
    var charCounts = countCharOccurances(text);

    // replace each char by its count
    var digits = '';
    for (var l = 0; l < text.length; l++) {
         digits += charCounts[text[l]];
    }

    // do the magic sum, until only 2 digits left
    var i = 1;
    while (digits.length > 2) {
        digits = sumAdjecentDigits(digits);

        // prevent an infinte loop
        i++;        
        if (i > 20) return false;
    }

    return text;
}

如果你开始玩它,你会注意到数字可以很快开始增长。一些样本:

  • 测试:5个周期 - &gt; 68
  • lorem ipsum:20个周期 - &gt; 181265311222213119191055129159163315 ...(超过500位数)

这就是我添加'无限循环'保护的原因。即使有100个周期的警卫,我的浏览器也崩溃了......

还有一个问题,对你而言。除了是一个有趣的实验,为什么你需要这样的算法?

我希望你喜欢我想出的结果。随意询问是否有任何不清楚,或者我是否误解了任何规格。