function applyBitCriteria( binList, criteria, bitIndex = 0 ) {
if (binList.length === 1)
return binList[0]
let count0 = countAtPos(binList, "0", bitIndex)
switch(criteria) {
case "mostCommon":
if (count0 > binList.length / 2)
return applyBitCriteria(binList.filter( val => val[bitIndex] === "0"), criteria, ++bitIndex)
else
return applyBitCriteria(binList.filter( val => val[bitIndex] === "1"), criteria, ++bitIndex)
break;
case "leastCommon":
if (count0 > binList.length / 2)
return applyBitCriteria(binList.filter( val => val[bitIndex] === "1"), criteria, ++bitIndex)
else
return applyBitCriteria(binList.filter( val => val[bitIndex] === "0"), criteria, ++bitIndex)
break;
default:
return `Error : unknown criteria "${criteria}"`
}
}