Produtos Notáveis

(a+b) ^ n

by ravan

HTML

Calcula o produto notável de (a+b)<sup>N</sup><br />
<input id="num" type="text" placeholder="Digite o N" /> <input id="btn" type="button" value="Gerar!" /><br /><br />
<span id="result"></span>

JavaScript

function linhaTriangulo(n) {
    var s = [[1]];
    for (i = 1; i <= n; i++) {
        s[i] = [];
        s[i][0] = s[i][i] = 1;
        for (j = 1; j < i; j++) {
            s[i][j] = (s[i - 1][j] | 0) + (s[i - 1][j - 1] | 0);
        }
    }
    return s[n];
}

function produtoNotavel(n) {
    var lt = linhaTriangulo(n);
    var s = '';
    
    for(j = 0, i = lt.length- 1; j <= i ; j++) {
        s += lt[j] + 'a^' + (i-j) + 'b^' + (j) + ' + ';
    }

    s = s.replace(/\^1(\D)/g,"$1")
        .replace(/[ab]\^0/g,"")
        .replace(/(\D)1([ab])/g,"$1$2")
        .replace(/^1([ab])/,"$1")
        .replace(/\s*\+\s*$/,"");
    return s;
}


/* só para parte visual */
document.getElementById("btn").onclick = function() {
    var num = document.getElementById("num").value;
    var p = produtoNotavel(num);
    p = p.replace(/\^(\d+)/g,"<sup>$1</sup>")
        .replace(/a/g,"!")
        .replace(/b/g,"?")
        .replace(/(\d+)(!|\?)/g,"<b>$1</b>$2")
        .replace(/!/g,"<font color='red'>a</font>")
        .replace(/\?/g,"<font color='blue'>b</font>")
    document.getElementById("result").innerHTML = p;
}