JavaScriptで配列のシャッフル強度をチェックする方法
数値の配列において、隣り合う2つの要素が昇順の連続した関係になっていない箇所がどれだけ存在するかによって、シャッフルの強度を測ることができます(ここでは昇順の場合のみを扱います)。隣接する要素の中に昇順のペアがひとつも存在しなければ100%シャッフルされた状態であり、逆にすべてのペアが昇順に並んでいれば0%シャッフルされた状態といえます。
長さnの配列には、元の順序を崩さずに見たとき、隣接する要素のペアがn-1個存在します。
そこで本記事では、数値の配列を受け取り、その配列のシャッフル強度を表す0〜100の範囲の数値を返すJavaScript関数を作成します。
サンプルコード
以下が実際のコードです。
const arr = [4, 23, 1, 23, 35, 78, 4, 45, 7, 34, 7];
// 昇順ソートからの逸脱度を計算する関数
const shuffleIntensity = arr => {
let inCorrectPairs = 0;
if(arr.length <= 1){
return 0;
};
for(let i = 0; i < arr.length - 1; i++){
if(arr[i] - arr[i+1] <= 0){
continue;
};
inCorrectPairs++;
};
return (inCorrectPairs / (arr.length -1)) * 100;
};
console.log(shuffleIntensity(arr));出力結果
コンソールには以下のように表示されます。
40
この結果は、配列全体のうち約40%がシャッフルされていることを意味します。
コードの解説
この関数の仕組みは非常にシンプルです。まず、配列の長さが1以下の場合は比較対象となるペアが存在しないため、0を即座に返します。次に、forループで隣接する各ペアを順番に走査し、現在の要素が次の要素より大きい場合(つまり降順になっている場合)を「正しくないペア」としてカウントしていきます。最後に、その不正ペアの数を全体のペア数(n-1)で割り、100を掛けることでシャッフル強度のパーセンテージを算出しています。この手法により、配列がどの程度ランダムに並び替えられているかを直感的な数値として把握できるのが魅力です。
-
JavaScriptで配列内の要素がすべて一意(ユニーク)かどうかをチェックする方法
JavaScriptで、数値の配列を引数として受け取り、その配列に含まれるすべての数値が一度だけ出現する(=重複が一切ない)場合には true を、そうでない場合には false を返す関数を作成してみましょう。問題の例たとえば、次のような入力配列が与えられたとします。const arr = [12, 45, 6, 34, 12, 57, 79, 4];この場合、期待される出力は次のとおりです。const output = false;これは、数値 12 が配列内に2回出現しているためです。indexOf と lastIndexOf を使った実装例この問題は、各要素に対して indexOf()
-
JavaScriptで配列内の最小値の桁和が偶数かどうかを判定する方法
本記事では、数値の配列を唯一の引数として受け取るJavaScript関数の実装方法を解説します。この関数は、まず配列の中から最小の数値を選び出し、その数値を構成するすべての桁の合計(桁和)を計算します。そして、その桁和が偶数であれば true を、奇数であれば false を返すという仕様です。動作の例たとえば、次のような入力配列が与えられた場合を考えてみましょう。const arr = [12, 657, 23, 56, 34, 678, 42];この場合の出力は次のようになります。const output = false;理由はシンプルです。配列内の最小値は 12 であり、その桁和は 1