<h1>👋 Array Addition</h1>
<div id="example1"></div>
<div id="example2"></div>
<div id="example3"></div>
<div id="example4"></div>
const prepareAddedNumbers = (originalSetOfNumberToBeAdded) => [
originalSetOfNumberToBeAdded.map((number) => [number])
];
const performAdditionOperationOnGroupOfNumbers = ({
originalSetOfNumberToBeAdded,
indexOfNumberToBeAdded,
indexOfGroupOfNumberToBeAdded,
indexOfLastGroupOfNumberToBeAdded,
numberToBeAdded
}) => {
return originalSetOfNumberToBeAdded
.map((originalNumber, indexOfOriginalNumber) => {
if (
indexOfOriginalNumber <=
indexOfNumberToBeAdded +
indexOfGroupOfNumberToBeAdded +
indexOfLastGroupOfNumberToBeAdded
) {
return;
}
return numberToBeAdded + originalNumber;
})
.filter(Boolean);
};
const arrayAdditionOperation = (
preparedNumberToBeAdded,
originalSetOfNumberToBeAdded
) => {
if (preparedNumberToBeAdded.length === originalSetOfNumberToBeAdded.length) {
return preparedNumberToBeAdded.flat(Infinity);
}
const indexOfLastGroupOfNumberToBeAdded = preparedNumberToBeAdded.length - 1;
const newGroupOfNumberToBeAdded = preparedNumberToBeAdded[
indexOfLastGroupOfNumberToBeAdded
]
.map((groupOfNumberToBeAdded, indexOfGroupOfNumberToBeAdded) => {
return groupOfNumberToBeAdded
.map((numberToBeAdded, indexOfNumberToBeAdded) => {
if (
groupOfNumberToBeAdded.length > 1 &&
indexOfNumberToBeAdded === groupOfNumberToBeAdded.length - 1
) {
return;
}
return performAdditionOperationOnGroupOfNumbers({
originalSetOfNumberToBeAdded,
indexOfNumberToBeAdded,
indexOfGroupOfNumberToBeAdded,
indexOfLastGroupOfNumberToBeAdded,
numberToBeAdded
});
})
.filter(Boolean)
.flat();
})
.filter((array) => array.length > 0);
return arrayAdditionOperation(
[...preparedNumberToBeAdded, newGroupOfNumberToBeAdded],
originalSetOfNumberToBeAdded
);
};
const arrayAddition = (input) => {
const goal = Math.max(...input);
const originalSetOfNumberToBeAdded = input.sort((a, b) => b - a).splice(1);
return arrayAdditionOperation(
prepareAddedNumbers(originalSetOfNumberToBeAdded),
originalSetOfNumberToBeAdded
).includes(goal);
};
document.getElementById("example1").innerHTML =
"[5, 7, 16, 1, 2] => " + arrayAddition([5, 7, 16, 1, 2]);
document.getElementById("example2").innerHTML =
"[4, 6, 23, 10, 1, 3] => " + arrayAddition([4, 6, 23, 10, 1, 3]);
document.getElementById("example3").innerHTML =
"[3, 5, -1, 8, 12] => " + arrayAddition([3, 5, -1, 8, 12]);
document.getElementById("example4").innerHTML =
"[1, 1] => " + arrayAddition([1, 1]);
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.