JavaScriptでカプレカ数を探す旅

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
16進数にもカプレカ数はある(2進数にもある)

この記事を三行にまとめると

入力した数字がカプレカ数か判定する
カプレカ数になるまで操作を繰り返す
16進数のカプレカ数を判定
この記事は以下の動画の中に出てきたサンプルコードを載せたものです。コピペなどが必要なときに使ってください。





HTMLとCSS

<div>
  <input type="number" id="number">
  <button type="button" id="start">検証開始</button>
</div>
<div id="formula"></div>
<div id="result"></div>

<style>
  * { font-size: 24px; font-family: 'メイリオ' }
  body { text-align: center }
  input, button { padding: 5px }
</style>



入力された数字がカプレカ数か判定する

number = document.getElementById('number');
start = document.getElementById('start');
formula = document.getElementById('formula');
result = document.getElementById('result');

start.onclick = function() {
  num = number.value;

  lists = num.split('');
  min = lists.sort().join('');
  max = lists.reverse().join('');
  answer = max - min;

  formula.innerText = max + ' - ' + min + ' = ' + answer;
  result.innerText = (num == answer) ? 'カプレカ数です!' : 'カプレカ数じゃないです';
}



入力した数以下のカプレカ数を抽出

start.onclick = function() {
  num = number.value;
  kaprekar = [];

  for(i = 0; i <= num; i++) {
    lists = String(i).split('');
    min = lists.sort().join('');
    max = lists.reverse().join('');

    if(i == max - min) {
      kaprekar.push(i);
    }
  }

  result.innerText = 'カプレカ数は' + kaprekar.join(', ');
}



カプレカ数になるか計算結果がループするまで操作を繰り返す

start.onclick = function() {
  num = number.value;
  result.innerText = '';
  answers = [];

  while(true) {
    lists = String(num).split('');
    min = lists.sort().join('');
    max = lists.reverse().join('');
    answer = max - min;

    if(num == answer) {
      result.innerText += 'カプレカ数になりました!';
      break;
    } else {
      result.innerText += max + ' - ' + min + ' = ' + answer + '\n';

      if(answers.includes(answer)) {
        result.innerText += 'ループに入りました';
        break;
      }

      answers.push(answer);
      num = answer;
    }
  }
}



16進数のカプレカ数を判定

start.onclick = function() {
  num = number.value;

  lists = num.split('');
  min = '0x' + lists.sort().join('');
  max = '0x' + lists.reverse().join('');
  answer = (max - min).toString(16);

  formula.innerText = max.substring(2) + ' - ' + min.substring(2) + ' = ' + answer;
  result.innerText = (num == answer) ? 'カプレカ数です!' : 'カプレカ数じゃないです';
}
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください