aetheric mixer

by Anthony Weber

HTML

<div id="container"></div>
<div id="results"></div>

JavaScript

numInputs = 12

let body = document.getElementById('container')

let inputs = []
for (let i = 0; i < numInputs; i++) {
  inputs[i] = document.createElement('input')
  //inputs[i].type = 'number'
  //inputs[i].step = 0.01
  //inputs[i].min = 0.01
  //inputs[i].max = 14
  
  body.appendChild(inputs[i]) 
  body.appendChild(document.createElement('br'))
}

let submit = document.createElement('button')
submit.innerHTML = 'figure shit out'
body.appendChild(submit)

submit.addEventListener('click', e => {
  let validFields = 0
  let values = []
  for (let i = 0; i < numInputs; i++) {
    let value = Number.parseFloat(inputs[i].value)
    if (value && value > 0 && value <= 14) {
      values.push(i)
    } else {
      break
    }
  }
  if (values.length >= 3) doStuff(values)
})

function doStuff(values) {
  //console.log(values)
  let results = []
  for (let i = 0; i < values.length-2; i++) {
    for (let j = i+1; j < values.length-1; j++) {
      for (let k = j+1; k < values.length; k++) {
        let first = Number.parseFloat(inputs[i].value)
        let second = Number.parseFloat(inputs[j].value)
        let third = Number.parseFloat(inputs[k].value)
        let result = ((first + second + third) / 3)
        results.push({ids: [i, j, k], average: Math.round((result + Number.EPSILON) * 100) / 100})
        //console.log(`(${first} + ${second} + ${third}) / 3 = `)
        //console.log(result)
      }
    }
  }
  results = results.sort((a, b) => { return Math.abs(7-a.average) - Math.abs(7-b.average)})
  output = document.getElementById("results")
  output.innerHTML = ''
  for (let result of results) {
    output.innerHTML += JSON.stringify(result) + " - "
    output.innerHTML += `${inputs[result.ids[0]].value} + ${inputs[result.ids[1]].value} + ${inputs[result.ids[2]].value} = ${result.average}`
    output.innerHTML += ` scoring ${lookup(result.average)} points`
    output.innerHTML += "<br>"
  }
}

function...