Kaprekar's constant

Javascript version of Kaprekar's constant. Provided a four digit number (with rules), a loop will produce 6174 by the seventh iteration.

by Travis Almand

HTML

<label>
  <span>Four digit number please</span>
  <input id="input" type="number" min="1000" max="9999" />
</label>
<button id="compute">compute</button>

<div id="output"></div>

SCSS

#output {
  border: 2px solid rebeccapurple;
  margin: 10px 0;
  padding: 10px;
  
  .false {
    color: red;
  }
  .true {
    color: rebeccapurple;
  }
}

JavaScript

let inputNum = 9514;
const output = document.querySelector('#output');

function kaprekar (num) {
	const increasing = function (up) {
  	return parseInt(up.toString().split('').sort().join(''), 10);
  };
  const decreasing = function (down) {
  	return parseInt(down.toString().split('').sort().reverse().join(''), 10);
  };
  
  let numA = increasing(num);
  let numB = decreasing(num);
  let difference = null;
  
  for (let i = 0; i < 10; i++) {    
    if (difference) {
    	numA = increasing(difference);
      numB = decreasing(difference);
    }
    difference = numA > numB ? numA - numB : numB - numA;
    
    const className = difference === 6174;

    output.insertAdjacentHTML('beforeend', `<div class="${className.toString()}">${i}: ${difference}</div>`)
  }
}

document.querySelector('#compute').addEventListener('click', function () {
	const input = document.querySelector('#input');
  
  if (input.validity.valid) {
  	output.innerHTML = '';
  	kaprekar(input.value);
  } else {
  	output.innerText = input.validationMessage;
  }
});