JSFiddle - React, Tailwind, and code Playground

by tara5

JavaScript

function dickson(r) {
    var triples = [],
        squareRdiv2 = (r * r) / 2,
        x,
        y,
        z;

    var factArray = factorize(squareRdiv2);

    for (var j = 0; j < factArray.length; j++) {
        triples.push([r + factArray[j][1], r + factArray[j][0], r + factArray[j][1] + factArray[j][0]]);
    }

    return triples;
}

function factorize(number, divider, array, leftArray) {
    var factorizationArray = array || [],
        isDividable = true,
        leftArray = leftArray || [],
        divider = divider || 1;

    var modulo = number % divider,
        left = modulo ? 0 : number / divider;

    if (left === 1) {
        return;
    }

    left && (leftArray.indexOf(divider) === -1) && factorizationArray.push([left, divider]);

    left && leftArray.push(left);

    divider = divider + 1;

    factorize(number, divider, factorizationArray, leftArray);

    return factorizationArray;
}

function findThousand() {
    var notFound = true,
        foundTriple,
        r = 6;

    while (notFound) {
        var array = dickson(r);
        for (var i = 0; i < array.length; i++) {
            if (array[i][0] + array[i][1] + array[i][2] === 1000) {
                foundTriple = array[i];
                notFound = false;
                break;
            }
        }
        r = r + 2;
    }

    return foundTriple;
}

console.log(findThousand());