この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - JavaScript コーディング問題
133. 整数をローマ数字に変換する

解法:

整数をローマ数字に変換するには、次の手順に従います。

  1. テーブルから最大のローマ数字で数値を減算します
  2. できるだけ大きい数字で削減できるだけシステムに加えます
  3. 1 - 2を繰り返します。

以下は、このアプローチを実装する方法です。

function integerToRoman(num) {

  const romanToIntMap = new Map([
    [1000, 'M'],
    [900, 'CM'],
    [500, 'D'],
    [400, 'CD'],
    [100, 'C'],
    [90, 'XC'],
    [50, 'L'],
    [40, 'XL'],
    [10, 'X'],
    [9, 'IX'],
    [5, 'V'],
    [4, 'IV'],
    [1, 'I']
  ]);

  let result = '';

  for (let [intVal, romanVal] of romanToIntMap) {
    while (num >= intVal) {
      result += romanVal;
      num -= intVal;
    }
  }

  return result;
}

ローマ数字の対応は Map で表現され、ループを使って先頭から大きい順にループします。与えられたループ値が現在値より大きくなるまで、そのループ値を結果に追加し、現在値から引きます。これにより、テーブルからできるだけ最も大きな数字を取り除くことができます。必要に応じて、結果文字列を返します。

この関数を次のようにテストできます。

console.log(integerToRoman(123)); // 'CXXIII'
console.log(integerToRoman(1999)); // 'MCMXCIX'
console.log(integerToRoman(3420)); // 'MMMCDXX'

これで与えられたテストケースが正常に動作するはずです。