JSFiddle - React, Tailwind, and code Playground
by Ahmad Baktash Hayeri
JavaScript
var timeouts = [
150,
//210,
50,
300,
25
];
var calculated = 400,
actual = 825;
var t = verifyTopUpSuccess(calculated, actual, 210, timeouts)
console.log(t);
function verifyTopUpSuccess(calculated, actual, pivot, items) {
if (calculated === actual) return true;
var sumComboArray = [];
for (var i = items.length; i > 0; i--) {
sumComboArray.push(chooseRofN(items, i));
}
for (var i = 0; i < sumComboArray.length; i++) {
for (var j = 0; j < sumComboArray[i].length; j++) {
var sum = 0;
for (k = 0; k < sumComboArray[i][j].length; k++) {
sum += sumComboArray[i][j][k];
}
if (calculated === (actual - sum)) {
console.log(sum);
console.log(calculated)
return true;
}
}
}
return false;
}
function chooseRofN(items, r) {
var chosen = [];
if (r > items.length) return;
for (var n = 0; n < items.length; n++) {
for (var t = 0; t < items.length - 1; t++) {
var pivot = items[t];
for (var i = t + 1; i < items.length - (r - 2); i++) {
pluck = [];
pluck.push(pivot);
for (var j = 0; j < r - 1; j++) {
pluck.push(items[i + j])
}
if (!hasEqualArray(chosen, pluck)) {
chosen.push(pluck);
}
}
var temp = items[t];
items[t] = items[t + 1];
items[t + 1] = temp;
}
}
return chosen;
}
function hasEqualArray(collection, match) {
for (var i = 0; i < collection.length; i++) {
if (collection[i].length !== match.length) continue;
if (isEqual(collection[i], match)) {
return true;
}
}
return false;
}
function isEqual(arr1, arr2) {
arr1.sort(sortCallback);
arr2.sort(sortCallback);
for (var i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i]) {
return false
}
}
return true;
}
function sortCallback(a, b) {
return a > b;
}