subsetAverage

by strider820

JavaScript

function subsetAverage(numbers, target, count, partial) {
  var s, n, remaining;

  partial = partial || [];

  // sum partial
  s = partial.reduce(function (a, b) {
    return a + b;
  }, 0);

  // check if the partial sum/count is equals to target
  if (Math.round(s/count*10)/10 === target && partial.length == count) {
    console.log("(%s) / %s = %s", partial.join(" + "), count, target)
  }

  if (Math.round(s/count*10)/10 >= target || partial.length >= count) {
    return;  // if we reach the number why bother to continue
  }

  for (var i = 0; i < numbers.length; i++) {
    n = numbers[i];
    remaining = numbers.slice(i + 1);
    subsetAverage(remaining, target, count, partial.concat([n]));
  }
}

subsetAverage([4,6,6,7,7,8,9,9],7.3,4);