-
JavaScriptで文字の出現頻度に基づいて文字列をエンコードする方法
問題文字列 str を唯一の引数として受け取る JavaScript 関数を作成する必要があります。この関数は、入力文字列をもとに新しい文字列を生成します。元の文字列の中でその文字が1回だけ出現する場合には「(」を、2回以上出現する場合には「)」を、対応する位置に割り当てます。なお、大文字と小文字の違いは無視して判定します。例えば、関数への入力が次の場合 −入力const str = Success;出力const output = )())());考え方入力文字列「Success」を大文字小文字を区別せずに見ると、「s」は3回、「u」は1回、「c」は2回、「e」は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で数値の階乗の桁数を求める方法
問題JavaScriptで、数値 num を唯一の引数として受け取る関数を作成することを考えます。この関数は、num の階乗(n!)が何桁になるかを計算し、その桁数を返す必要があります。たとえば、関数への入力が次のような場合を考えてみましょう。入力const num = 7;出力const output = 4;出力の解説7! = 5040 であり、5040は4桁の数字であるため、結果は 4 となります。アプローチ:対数を使った賢い計算方法一見すると、階乗を直接計算して文字列の長さを数えればよさそうに思えます。しかし、階乗は極めて急激に増加するため、少し大きな数でもすぐにJavaScriptの
-
JavaScriptでペアの最小値合計を最大化するアルゴリズムを解説
この記事では、整数の配列を受け取り、ペアごとの最小値の合計が最大になるようにグループ分けするJavaScript関数の実装方法を解説します。 問題の概要 長さ2nの整数配列 arr を引数として受け取るJavaScript関数を作成します。この関数の目的は、配列内の整数をn個のペア (a1, b1), (a2, b2), ..., (an, bn) にグループ化し、各ペアの最小値 min(ai, bi) の合計(i = 1 から n まで)ができるだけ大きくなるようにすることです。 例えば、次の入力が与えられたとします。 const arr = [1, 4, 3, 2]; この場合、期待される
-
JavaScriptで空白と単語の順序を保持しながら各単語を反転する方法
はじめに本記事では、文字列を引数として受け取り、その中の各単語の文字順を反転させながら、空白の位置と元の単語の順序はそのまま保持するJavaScript関数の作成方法を解説します。課題の概要作成する関数は、文章を表す文字列 str を第1引数(唯一の引数)として受け取ります。この関数は、文中の各単語に含まれる文字の並びを逆順にします。ただし、空白の位置や単語が出現する順序自体は変えずに維持する必要があります。入出力例たとえば、次の文字列を入力した場合を考えてみましょう。const str = this is some sample string;この場合、期待される出力は以下の通りです。con
-
JavaScriptで配列内の時刻の最小時間差を求める方法
問題概要JavaScriptで、24時間制の時刻を「時:分」形式で表した文字列の配列を受け取る関数を作成します。この関数の目的は、配列内の任意の2つの時刻の組み合わせの中から、最も小さい時間差(分単位)を見つけ出すことです。例えば、次のような入力が与えられたとします。const arr = [23:59,00:00];この場合、期待される出力は以下の通りです。const output = 1;これは、「23:59」と翌日の「00:00」の間の時間差がわずか1分であるためです。時刻は一日の中で循環することを考慮する必要がある点に注意してください。解決のアプローチこの問題を効率的に解くためには、以
-
JavaScriptでメソッドチェーン対応の計算クラスを作成する方法
課題本記事では、JavaScriptにおいて値と演算を交互に、任意の回数だけ連鎖(チェーン)できるユーザー定義データ型「Streak」を作成する方法を解説します。使用できる値は、次のいずれかの文字列です。one, two, three, four, five, six, seven, eight, nineまた、使用できる演算子は次の文字列です。plus(加算), minus(減算)たとえば、このクラスを使って次のように記述したとします。streak.one.plus.five.minus.three;このとき、期待される出力結果は次の通りです。const output = 3;出力の解説この
-
JavaScriptで秒数を年・日・時間・分・秒に変換する関数を実装する方法
問題秒数を表す数値を第1引数(唯一の引数)として受け取り、その秒数に含まれる年・日・時間・分・秒の情報を文字列として構築して返すJavaScript関数を作成します。なお、この問題では計算をシンプルにするため、1年は365日とみなして扱います。たとえば、関数に次の入力を与えた場合――const num = 5454776657;期待される出力は次のとおりです。const output = 172 years, 353 days, 23 hours, 44 minutes and 17 seconds;解決策:サンプルコード以下が実際のコードです。const findTime = (num) =
-
【JavaScript】同じ数字の並び替えで作れる「ちょうど大きい数」を見つける方法
問題数値 num を唯一の引数として受け取るJavaScript関数を作成する必要があります。この関数が返すべきのは、入力された数値とまったく同じ数字だけ(すべての桁を使い切り、余分な数字を含まない)で構成され、入力値よりちょうど一つ大きい数です。そのような数が存在しない場合は -1 を返します。例const num = 5656;この場合の出力は以下のようになります。const output = 5665;出力の解説5665 は 5656 と同じ数字(5、6、5、6)だけで構成されており、5656 より大きい数の中で最小のものであるためです。アプローチ1:全探索(シンプルな方法)最も直感的な
-
JavaScriptで配列内のすべてのピーク(局所最大値)とその位置を検出する方法
データ分析や信号処理の現場では、数値の配列の中から「山」にあたる部分、つまり局所最大値(ピーク)とその位置を特定したい場面がよくあります。本記事では、JavaScriptを使って配列内のすべてのピークと、そのインデックス位置を効率的に検出する方法を解説します。 前提となる例 まず、次のようなJavaScriptの配列を用意します。 const arr = [4, 3, 4, 7, 5, 2, 3, 4, 3, 2, 3, 4]; この配列の各要素をY軸の値としてプロットし、隣り合う要素同士をX軸上で等間隔(単位距離)に配置すると、グラフは以下のようになります。 グラフを見ると分かるように、こ
-
JavaScriptで文字列の配列からコメントを削除する方法
この記事では、JavaScriptを使って文字列の配列からコメント部分を削除する方法について解説します。 問題 文字列の配列 arr を第一引数として、特殊文字の配列 starters を第二引数として受け取るJavaScript関数を作成する必要があります。 starters 配列には、コメントの開始となり得る文字が格納されています。作成する関数は、配列 arr を走査し、各文字列に含まれるコメントをすべて削除した結果を返すものとします。 例えば、関数への入力が次のような場合を考えてみましょう。 const arr = [ red, green !blue
-
【JavaScript】キャメルケースの文字列をスペース区切りで分割する方法
問題キャメルケース(camelCase)で書かれた文字列 str を、第1引数(唯一の引数)として受け取るJavaScript関数を作成する必要があります。この関数は、入力された文字列の各単語の間に半角スペースを挿入して分割し、新しい文字列として構築して返すものとします。たとえば、関数への入力が次の場合を考えてみましょう。入力:const str = thisIsACamelCasedString;出力:const output = this Is A Camel Cased String;解決策:コード例以下がその実装コードです。const str = thisIsACamelCasedSt
-
【JavaScript】反対方向の移動を打ち消して最終的な進行方向を求める方法
問題1文字ずつの要素からなる配列 arr を唯一の引数として受け取り、配列全体の移動をすべて計算した結果として残る「最終的な方向」を返す JavaScript 関数を作成します。配列に含まれるのは次の4種類の文字のみです。N → 北(North)方向へ単位距離だけ移動S → 南(South)方向へ単位距離だけ移動W → 西(West)方向へ単位距離だけ移動E → 東(East)方向へ単位距離だけ移動各文字はその方向への1単位分の移動を表します。ここで重要なルールとして、配列内で互いに反対向きの組み合わせ、すなわち (S と N) または (E と W) が隣接して現れた場合、それらは互いの移動
-
【JavaScript】連続する配列要素の合計で新しい配列を作成する方法
問題の概要JavaScriptで、第1引数として数値の配列 arr を、第2引数として整数 num(num は配列の長さ以下)を受け取る関数を作成する必要があります。この関数は、元の配列 arr 内にある長さ num の連続する部分配列(スライディングウィンドウ)ごとに合計を計算し、その結果を新しい配列の要素として返します。入力例const arr = [1, 2, 3, 4, 5, 6]; const num = 2;期待される出力const output = [3, 5, 7, 9, 11];出力の解説隣り合う2つの要素を順番に足し合わせています。1 + 2 = 32 + 3 = 53 +
-
JavaScriptで桁の和が回文数かどうかを判定する関数を作る方法
問題概要今回は、数値 num を第1引数(唯一の引数)として受け取る JavaScript 関数を作成します。この関数は、num の各桁の数字を合計した値が回文数(palindrome number)である場合に true を返し、そうでない場合は false を返す必要があります。例えば、関数への入力が次のようだったとします。const num = 781296;このとき、期待される出力は以下の通りです。const output = true;出力の解説781296 の各桁の和を計算すると、7 + 8 + 1 + 2 + 9 + 6 = 33 となります。33 は左右から読んでも同じ値になる
-
JavaScriptで2つの配列をマージして重複を削除する方法
課題 JavaScriptで、2つの数値の配列 arr1 と arr2 を引数として受け取る関数を作成することを考えます。 この関数は、両方の配列の要素を1つの新しい配列にマージします。マージの前後いずれかの時点で重複する要素が存在した場合には、余分なコピーを削除し、各要素が必ず1回だけ現れるようにしなければなりません。 要素の並び順は厳密には問われませんが、各要素の出現回数(必ず1回であること)が重要なポイントになります。 入力例 const arr1 = [6, 5, 2, 1, 8]; const arr2 = [3, 4, 6, 8, 9]; この場合、期待される出力は次のとおりです。
-
JavaScriptで文字列を逆アルファベット順にソートする方法
問題の概要JavaScriptで、小文字の英字からなる文字列 str を引数として受け取る関数を作成します。この関数の目的は、入力された文字列をもとに、英字を逆順(ZからA)で並べ替えた新しい文字列を生成して返すことです。例えば、次のような入力があったとします。const str = abcdef;この場合、期待される出力は以下のとおりです。const output = fedcba;実装方法この問題は、次の手順で解決できます。1. 文字列を split() メソッドで1文字ずつ配列に分解する2. カスタム比較関数を使って配列を降順にソートする3. join() メソッドで配列を再び文字列に結
-
JavaScriptで文字列から数字だけを抽出する方法
問題アルファベット・特殊文字・数字が混在した文字列 str を受け取り、その中に含まれる数字だけを元の順序のまま抽出して、新しい文字列として返すJavaScript関数を作成します。例えば、関数への入力が次の場合:const str = revd1fdfdfs2v34fd5gfgfd6gffg7ds;期待される出力は次のとおりです。const output = 1234567;解決コード以下がその実装例です。const str = revd1fdfdfs2v34fd5gfgfd6gffg7ds;const pickNumbers = (str = ) => { le
-
JavaScriptでネストされた配列をマージして1次元配列に変換する方法
問題の概要2つのネストされた(入れ子構造の)配列 arr1 と arr2 を引数として受け取り、それらのすべての要素を含む新しい配列を返すJavaScript関数を作成します。ただし、返される配列は1次元(フラットな構造)である必要があります。入力例const arr1 = [ 1, [ 2, [ 4, 5, [ 6 ] ] ] ]; const arr2 = [ 11, 12, [ 16, 18, [ 19, 21,
-
JavaScriptで最大値と最小値の差がちょうど1となる最長部分配列を求める方法
問題の概要数値の配列 arr を唯一の引数として受け取るJavaScript関数を作成することを目標とします。この関数は、部分配列内の最大値と最小値の差がちょうど1 となる連続した要素の集まり(部分配列)の中から、最も長いものの長さを見つけて返す必要があります。たとえば、関数への入力が次のような場合を考えてみましょう。const arr = [2, 4, 3, 3, 6, 3, 4, 8];このとき、期待される出力は次の通りです。const output = 5;出力の解説条件を満たす最長の部分配列は [4, 3, 3, 3, 4] です。この部分配列では最大値が4、最小値が3となり、その差は