JavaScriptで桁の合計値に基づいて配列内の数値を並べ替える方法
問題
正の整数のみを含む配列 arr を第1引数として受け取るJavaScript関数を作成する必要があります。
この関数は、各桁の数字の合計値(桁和)が最も大きい数値が先頭に来るように、以降は桁和の小さい数値が順に続く形で、入力配列をソートします。
例えば、関数への入力が次のような場合です。
入力
const arr = [5, 34, 1, 13, 76, 8, 78, 101, 57, 565];
出力
const output = [565, 78, 76, 57, 8, 34, 5, 13, 101, 1];
出力の説明
565の桁和は16と最も大きく、続いて78、76が続き、101と1はそれぞれ2と1という最小の桁和となるためです。
コード例
以下がその実装コードです。
const arr = [5, 34, 1, 13, 76, 8, 78, 101, 57, 565];
const addDigits = (num, sum = 0) => {
if(num){
return addDigits(Math.floor(num / 10), sum + (num % 10));
};
return sum;
};
const sortByDigitSum = (arr = []) => {
arr.sort((a, b) => {
return addDigits(b) - addDigits(a);
});
return arr;
};
sortByDigitSum(arr);
console.log(arr);
コードの解説
addDigits関数:数値の各桁の合計を再帰的に計算する関数です。num % 10で最下位の桁を取り出し、Math.floor(num / 10)で一桁ずつ切り下げながら桁を進めて合計を加算していきます。numが0になった時点で、累積したsumを返します。
sortByDigitSum関数:Array.prototype.sort()メソッドに比較関数を渡し、addDigits(b) - addDigits(a)の結果に基づいて要素を並べ替えます。この比較により、桁和が大きい数値ほど先頭に近い位置に配置されます。
出力
[ 565, 78, 76, 57, 8, 34, 5, 13, 101, 1 ]
-
JavaScriptで左右の合計が等しくなる「バランスインデックス」を配列から見つける方法
問題 整数の配列 arr を唯一の引数として受け取る JavaScript 関数を作成する必要があります。 この関数は、指定したインデックスの左側にある要素の合計と右側にある要素の合計が等しくなるようなインデックスを1つ見つけて返します。該当するインデックスが配列内に存在しない場合は、-1 を返します。 たとえば、関数への入力が次の場合を考えてみましょう。 入力 const arr = [1, 2, 3, 4, 3, 2, 1]; 出力 const output = 3; 出力の説明 インデックス 3 の左側(1 + 2 + 3 = 6)と右側(3 + 2 + 1 = 6)の要素の合計が、どち
-
JavaScriptで配列を出現頻度の昇順に並べ替える方法
問題数値の配列 arr を唯一の引数として受け取るJavaScript関数を作成する必要があります。配列 arr には重複した要素が含まれている可能性があります。この関数では、出現回数が少ない要素から順に配列を並べ替えます。つまり、出現頻度の低い要素を先頭に配置し、頻度の昇順に沿って残りの要素を並べていきます。なお、出現回数が同じ要素が複数存在する場合は、それらを値の昇順(小さい順)に配置する必要があります。入力例const arr = [5, 4, 5, 4, 2, 1, 12];出力例[1, 2, 12, 4, 4, 5, 5]出力の解説数値「1」「2」「12」はそれぞれ1回しか出現しない