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

JavaScriptでダブルトン数(Doubleton Number)を判定する方法


ダブルトン数とは

自然数のうち、ちょうど2種類の異なる数字のみで構成されている数を「ダブルトン数(doubleton number)」と呼びます。

例えば、以下の数はダブルトン数です。

  • 23(「2」と「3」の2種類)
  • 35(「3」と「5」の2種類)
  • 100(「1」と「0」の2種類)
  • 12121(「1」と「2」の2種類)

一方、123 は「1」「2」「3」の3種類、9980 は「9」「8」「0」の3種類の数字を含むため、ダブルトン数ではありません。

課題

数値を1つ受け取り、それがダブルトン数であれば true を、そうでなければ false を返すJavaScript関数を作成します。

実装例

以下がそのコードです。

const num = 121212;
const isDoubleTon = (num = 1) => {
    const str = String(num);
    const map = {};
    for(let i = 0; i < str.length; i++){
        const el = str[i];
        if(!map.hasOwnProperty(el)){
            map[el] = true;
        };
    };
    const props = Object.keys(map).length;
    return props === 2;
};
console.log(isDoubleTon(num));

コードの解説

  1. String(num) で数値を文字列に変換し、各桁を1文字ずつ扱えるようにします。
  2. 空のオブジェクト map を用意し、出現した数字をキーとして記録していきます。同じ数字が何度出現しても、キーは1つしか登録されません。
  3. Object.keys(map).length でユニークな数字の種類数を取得し、それが 2 と一致するかどうかを返します。

出力

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

true

よりシンプルな書き方:Setを活用

JavaScriptの Set オブジェクトは重複した値を保持しないため、これを使うとコードを大幅に簡潔にできます。

const isDoubleTon = (num = 1) => {
    return new Set(String(num)).size === 2;
};
console.log(isDoubleTon(121212)); // true
console.log(isDoubleTon(123));    // false

Set に文字列を渡すと各文字が自動的にユニークな要素として登録されるため、size プロパティを見るだけで数字の種類数が分かります。実務ではこちらの書き方のほうが可読性が高くおすすめです。


  1. JavaScriptのconst宣言とは?再代入できない変数の基本と使い方を解説

    JavaScriptのconst宣言は、値を再代入することも後から再宣言することもできない変数を作成するための構文です。constはES2015(ES6)で導入されました。 const宣言の主な特徴 一度値を代入すると、別の値に再代入することはできません。 同じ名前の変数を同じスコープ内で再宣言するとエラーになります。 宣言時に必ず初期値を代入する必要があります。 ブロックスコープ({}内でのみ有効)を持ちます。 それでは、JavaScriptにおけるconst宣言の実際のコードを見ていきましょう。 サンプルコード <!DOCTYPE html> <html>

  2. JavaScriptで配列の要素が2乗の関係かどうかをチェックする方法

    問題 2つの数値の配列 arr1 と arr2 をそれぞれ第1・第2引数として受け取るJavaScript関数を作成することを考えます。 この関数は、arr2 のすべての要素が、出現順序に関係なく arr1 のいずれかの要素の2乗と一致する場合にのみ true を返し、それ以外の場合は false を返す必要があります。 たとえば、関数への入力が次のようであった場合を考えてみましょう。 入力 const arr1 = [4, 1, 8, 5, 9]; const arr2 = [81, 1, 25, 16, 64]; 出力 const output = true; この場合、81 = 9²、