JavaScriptで数字列の中から最大の5桁の連続数字を見つける方法
問題
少なくとも5桁以上の数字で構成される文字列を受け取るJavaScript関数を作成する必要があります。この関数は、与えられた数字列の中に含まれる「連続する5桁」の中で最も大きな数値を返さなければなりません。
たとえば、入力が '123546544' の場合、取りうる5桁の組み合わせは「12354」「23546」「35465」「54654」「46544」となり、この中で最大のものは 54654 です。
解決アプローチ
考え方はシンプルです。
- 文字列を先頭から1文字ずつずらしながら、5文字分を切り出す
- 切り出したすべての5桁の部分文字列を配列に格納する
Math.max()を使って最大値を求める
JavaScriptでは数値文字列を Math.max() に渡すと自動的に数値へ変換されるため、明示的な変換は不要です。
コード例
const num = '123546544';
const findGreatestFiveDigit = (num = '') => {
const str = num.toString();
const arr = [];
for (let i = 0; i < str.length; i++) {
arr.push(str.slice(i, i + 5));
}
return Math.max(...arr);
};
console.log(findGreatestFiveDigit(num));出力結果
54654
コードの解説
str.slice(i, i + 5) を使うことで、インデックス i から始まる5文字分の部分文字列を取得できます。ループが終わると、arr には ['12354', '23546', '35465', '54654', '46544', '6544'] のような配列が生成されます。
末尾に近い部分では5桁に満たない短い文字列(例:'6544')も切り出されますが、これらは必ず5桁の候補より小さいため、最大値には影響しません。厳密に処理したい場合は、if (str.length - i >= 5) の条件を追加して、5桁に満たない部分文字列を除外することも可能です。
まとめ
slice() による部分文字列の切り出しと Math.max() のスプレッド構文を組み合わせることで、わずか数行のコードで連続する5桁の最大値を効率的に求めることができます。同様の手法は、任意の桁数Nに対応するよう拡張することも簡単にできます。
-
JavaScriptで3つの配列に共通する要素の合計を求める方法
問題今回は、3つの数値型配列を引数として受け取るJavaScript関数を作成します。この関数は、3つの配列すべてに共通して存在する要素だけを抜き出し、それらの合計値を返す必要があります。たとえば、次のような配列が与えられた場合を考えてみましょう。const arr1 = [4, 4, 5, 8, 3]; const arr2 = [7, 3, 7, 4, 1]; const arr3 = [11, 0, 7, 3, 4];この場合、3つの配列すべてに存在するのは「4」と「3」なので、期待される出力は 4 + 3 = 7 となります。解決策のコード例以下がその実装コードです。 { le
-
JavaScriptで配列内の特定の数値に最も近い2つの要素を検索する方法
問題の概要JavaScriptで、ソート済みの整数配列 arr を第一引数に、目標となる数値 target を第二引数に受け取る関数を作成します。この関数は、配列内に存在する要素の中から target に最も近い2つの数値を選び、それらを昇順に並べた配列として返す必要があります。例えば、以下のような入力が与えられた場合を考えてみましょう。入力:const arr = [1, 2, 3, 4, 5];const target = 3;出力:const output = [2, 3];この場合、target の値が 3 であるため、最も近い2つの要素は 2 と 3 となり、昇順に並べて [2, 3