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;
}
});