{
let calls = 0;
const stackAdapters = _.memoize(
(target, adapterBag, current = 0) => {
let sum = 0;
adapterBag.every((adapter, idx, arr) => {
if (!validAdapter(current, adapter)) return adapter <= current + 3;
if (validAdapter(adapter, target)) {
sum++;
} else {
if (calls++ > 100000) throw "Too much recursion! " + sum;
const newBag = removeIndex(adapterBag, idx);
sum += stackAdapters(target, newBag, adapter);
}
return true;
});
return sum;
},
(target, adapterBag, current = 0) => current
);
const parsedTest = parse(input).sort((a, b) => a - b);
const max = Math.max.apply(null, parsedTest);
return stackAdapters(max + 3, parsedTest);
}