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;
}