const getProductOfAllOtherElements = (numbers: number[]) => {
    
    // Generate prefix products
    let prefixProducts: number[] = [];

    for (let i = 0; i < numbers.length; i++)
    {
        if (i == 0)
        {
            prefixProducts[i] = numbers[i];
        }
        else
        {
            prefixProducts[i] = prefixProducts[i - 1] * numbers[i];
        }
    }

    // Generate suffix products
    let suffixProducts: number[] = [];

    numbers.reverse();

    for (let i = 0; i < numbers.length; i++)
    {
        if (i == 0)
        {
            suffixProducts[i] = numbers[i];
        }
        else
        {
            suffixProducts[i] = suffixProducts[i - 1] * numbers[i];
        }
    }
    
    suffixProducts.reverse();
    numbers.reverse();

    // Generate result from the product of prefixes and suffixes
    let result: number[] = [];

    for (let i = 0; i < numbers.length; i++)
    {
        if (i == 0)
        {
            result[i] = suffixProducts[i + 1];
        }
        else if (i == numbers.length - 1)
        {
            result[i] = prefixProducts[i - 1];
        }
        else
        {
            result[i] = prefixProducts[i - 1] * suffixProducts[i + 1];
        }
    }

    return result;
};

const printSeparator = (size: number = 64) => {
    console.log(Array(size).join('-'));
};

const evaluate = (input: number[], expectedOutput: number[]) => {
    
    const result = getProductOfAllOtherElements(input);
		
	console.log(`Input: ${JSON.stringify(input)}`);
	console.log(`ExpectedOutput: ${JSON.stringify(expectedOutput)}`);
	console.log(`Result: ${JSON.stringify(result)}`);
	console.log(`IsCorrect: ${JSON.stringify(result) == JSON.stringify(expectedOutput)}`);
};

printSeparator();
evaluate([3, 2, 1], [2, 3, 6]);
printSeparator();
evaluate([1, 2, 3, 4, 5], [120, 60, 40, 30, 24]);
printSeparator();

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: