requiredOre = function (fuel) {
let iter = 10000, required = [{units: fuel, name: "FUEL"}], log=[];
while (iter--) {
required = required.map(c => needed(c))
.reduce((a, v) => a.concat(v),[])
.filter(c => c.units != 0)
.reduce((a, c) => {
let i = a.findIndex(v => v.name == c.name);
if (i == -1) { return a.concat( { name: c.name , units: c.units } ); }
a[i].units += c.units;
return a
}, []);
log.push(required);
if (required.every(c => (c.name == 'ORE')||(c.units < 0))) { break; }
}
return required.filter(c => c.name == 'ORE')[0].units
}