JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで顧客IDからナンバープレートを求める方法

問題

ある市Nの自動車登録システムでは、車に対して以下の2種類の番号が割り当てられます。

  • 顧客ID(Customer ID) − 0以上17558423以下の自然数。車の購入者に対して順番に付与され、最初の購入者はID「0」、2人目はID「1」、3人目はID「2」というように続きます。

  • ナンバープレート(Number Plate) − 車に割り当てられる番号で、「シリーズ(a〜zのラテン小文字3文字)」と「シリアル番号(0〜9の数字3桁)」で構成されます。

    例:「aaa001」。各ナンバープレートは特定の顧客IDと関連付けられています。たとえば、ナンバープレート「aaa001」は顧客ID「0」に、「aaa002」は顧客ID「1」に対応し、以降も同様に続きます。

ここでの課題は、顧客ID(customerID)を受け取り、そのIDに対応するナンバープレートを計算して文字列として返すJavaScript関数を作成することです。

サンプルコード

以下がその実装例です。

const id = 545664;
const findNumberPlate = (id = 0) => {
    const letters = 'abcdefghijklmnopqrstuvwxyz';
    // シリアル番号部分(1〜999)を算出
    let num = String(id % 999 + 1);
    // 3桁になるよう先頭に0を補填
    while(num.length !== 3){
        num = '0' + num;
    }
    // アルファベット部分のインデックスを算出
    const l = Math.floor(id / 999);
    return letters[l % 26] + letters[(Math.floor(l / 26)) % 26] + letters[(Math.floor(l / (26 * 26))) % 26] + num;
};
console.log(findNumberPlate(id));

出力結果

コンソールには以下のように出力されます。

ava211

コードの解説

この関数のロジックを順を追って見ていきましょう。

  • シリアル番号の算出: id % 999 + 1 により、1〜999の範囲の数字部分を求めます。IDが999の倍数ごとにシリアル番号が循環する仕組みです。
  • ゼロ埋め処理: 算出した数字が3桁に満たない場合、while ループで先頭に「0」を追加し、必ず3桁の形式に整えます。
  • アルファベット部分の算出: Math.floor(id / 999) で得られた値をもとに、26進法のような考え方で3文字の英字を決定します。1文字目は l % 26、2文字目は Math.floor(l / 26) % 26、3文字目は Math.floor(l / (26 * 26)) % 26 としてインデックスを求めます。
  • 結果の連結: 英字3文字と数字3桁を結合し、最終的なナンバープレートの文字列として返します。

この実装により、任意の顧客IDから対応するナンバープレートを効率的に導き出すことができます。

  1. JavaScriptで数値が三角数かどうかを判定する方法

    三角数(Triangular Number)とは? 三角数とは、点を正三角形の形に敷き詰めたときに現れる数のことです。n番目の三角数は「1からnまでの自然数の合計」として表され、次の公式で求められます。 Tn = n(n+1) / 2 具体的な三角数は 1, 3, 6, 10, 15, 21, 28 … と続きます。例えば 10 は、各辺に4個の点を配置した正三角形を構成できるため、三角数です。 問題 数値を引数として受け取り、その数値が三角数であれば true を、そうでなければ false を返すJavaScript関数を実装します。 判定の考え方 n(n+1)/2 = num となる正

  2. JavaScriptで生年月日からライフパスナンバーを求める方法

    ライフパスナンバーとはライフパスナンバーとは、数秘術においてその人の人生のテーマや資質を表すとされる数字です。生年月日の各桁の数字をすべて足し合わせ、一桁になるまで計算を繰り返すことで求められます。課題ここでは、「yyyy-mm-dd」形式の日付文字列を受け取り、その生年月日に対応するライフパスナンバーを返すJavaScript関数を作成します。たとえば、日付が「1999-06-10」の場合、計算は次のようになります。year(年) : 1 + 9 + 9 + 9 = 28 → 2 + 8 = 10 → 1 + 0 = 1 month(月) : 0 + 6 = 6 day(日) : 1 + 0