JSFiddle - React, Tailwind, and code Playground

by SwampFall

HTML

<table>
  <tr>
    <td>n-star</td>
    <td><input type="number" id="star"/></td>
  </tr>
  <tr>
    <td>
      N
    </td>
    <td>
      <input type="number" id="N"/>
    </td>
  </tr>
  <tr>
    <td>
      COD
    </td>
    <td>
      <input type="number" id="COD"/>
    </td>
  </tr>
  <tr>
    <td>Value</td>
    <td><input type="number" id="vn"/></td>
  </tr>
  <tr>
    <td colspan="2">
      <button onclick="concod()">
        Calculate CONcod
      </button>
      <button onclick="c()">
        Calculate C
      </button>
    </td>
  </tr>
</table>
<br>
<div id="output">

</div><br>
<div id="output2">

</div>

JavaScript

function concod(COD, printi, vn) {
	let star = document.getElementById("star").value;
  let N = document.getElementById("N").value;
  let print = false;
  if (COD === undefined) {
  	COD = document.getElementById("COD").value;
    print = true;
  }
  
  let CONcod = 0;
  let bcon = Math.min(N, 2 * (N - COD[COD.length - 1]));
  for (let i = 0; i < star; i++) {
  	let v = Math.pow(2, i) * Math.max(0, bcon - 2 * COD[i]);
    if (printi == i && COD[i] == vn) {
    	sum += v;
    	document.getElementById("output2").innerHTML += JSON.stringify(COD) + " - " + bcon + " - " + v + "<br>";
    }
  	CONcod += v;
  }
  CONcod += bcon;
  bcons += bcon;
  
  if (print)
  	document.getElementById("output").innerHTML = CONcod;
  
  return CONcod;
}

var sum = 0;
var bcons = 0;

function c() {
	let star = document.getElementById("star").value;
  let N = document.getElementById("N").value;
  let print = document.getElementById("COD").value;
  if (print == "") {
  	print = 0;
  }
  let vn = document.getElementById("vn").value;
  if (vn == "") {
  	vn = 1;
  }
  sum = 0;
  bcons = 0;
  let result = 0;
  let cod = [];
  for (let i = 0; i < star; i++) {
  	cod.push(i + 1);
  }
  
  document.getElementById("output2").innerHTML = "";
  let output = document.getElementById("output");
  output.innerHTML = "";
  let done = false;
  while (!done) {
  	result += concod(cod, print, vn);
    let index = star - 1;
    while (index >= 0) {
    	cod[index]++;
      for (let j = index; j < star - 1; j++) {
      	cod[j+1] = cod[j] + 1;
      }
      if (cod[index] < N - star + 1 + index) {
      	break;
      }
      index--;
    }
    if (cod[star - 1] >= N) {
      done = true;
    }
  }
  output.innerHTML += result + "<br>" + bcons + "<br>" + sum;
  
}