quartermaster = (arr) => {
var rations = []
var unclean = arr
var denominator = unclean.filter(x => typeof x === 'number')
var numerator = unclean.filter(x => typeof x === 'number')
var ratio = []
var fraction = []
var cents = []
var savarts = []
var centsStd = []
var combined = []
var obj = {Ratio: "", Fraction: "", Cents: "", CentsStd: "", RatioStd: "", Savarts: "", Viz: [], Notes: ""}
var uniqueFractions = []
var uniqueCentsStd = []
var counter = 0
var output = Array(counter)
function modulo (a) {return ((a%1200)+1200)%1200}
for (var n=0; n < numerator.length; n++){
for (var d=0; d < denominator.length; d++){
fraction.push(round(numerator[n]/denominator[d],3))
var textfrac = numerator[n]+"/"+denominator[d]
ratio.push(textfrac)
}
}
cents = fraction.map(ratioToCents)
savarts = fraction.map(ratioToSavarts)
centsStd = cents.map(modulo)
for (var i=0; i < fraction.length; i++){
if (Object.values(uniqueFractions).includes(fraction[i])) {continue}
if (Object.values(uniqueCentsStd).includes(centsStd[i])) {continue}
if (fraction[i]<1) {continue}
var key = ratio[i]
combined[key] = Object.create(obj)
combined[key].Ratio = ratio[i]
combined[key].Fraction = fraction[i]
combined[key].Cents = Math.abs(round(cents[i],3))
combined[key].Savarts = Math.abs(round(savarts[i],3))
if (combined[key].Cents > 1200) {continue};
combined[key].CentsStd = round(centsStd[i],3)
if (combined[key].CentsStd < 1) {continue};
combined[key].Viz = [{Blue: centsStd[i], Pink: 1200-centsStd[i]}]
uniqueFractions.push(fraction[i])
uniqueCentsStd.push(centsStd[i])
counter++
output.push(combined[key])
}
return output
}