-
JavaScriptでパリティビットを計算してバイナリに追加する方法
パリティビットとはパリティビット(チェックビットとも呼ばれます)とは、ビット列に付加される1ビットのことで、ビット列全体に含まれる「1」の総数が偶数(偶数パリティ)または奇数(奇数パリティ)になるように調整するために使用されます。データ通信や記憶装置における誤り検出の基本的な手法として、古くから広く利用されています。問題ここでは、次の2つの引数を受け取るJavaScript関数を作成します。希望するパリティ(even または odd のいずれか)チェック対象の数値を表すバイナリ文字列関数の役割は、そのバイナリ表現に追加すべきパリティビット(0または1の整数)を返すことです。返されたビットを付加
-
JavaScriptで指定範囲内の数値の立方和を計算する方法
問題今回は、2つの数値からなる範囲配列を受け取り、その範囲内に含まれるすべての数値の立方数(3乗した値)を合計して返すJavaScript関数を作成します。たとえば、範囲が [4, 11] の場合、4³ から 11³ までの合計を求めることになります。解決のアプローチこの問題は次の手順で解くことができます。範囲の下限から上限まで、順番に各数値を取り出す取り出した数値を3乗する3乗した値を累積し、最終的な合計を返すコード例実際の実装コードは以下の通りです。const range = [4, 11]; const sumCubes = ([l, h]) => { const find
-
JavaScriptでArray.prototype.filter()風のカスタム関数を実装する方法
問題 JavaScriptで、Arrayクラスのプロトタイプオブジェクト上に実装する関数を作成する必要があります。 この関数はコールバック関数を唯一の引数として受け取り、配列の各要素に対してそのコールバック関数を呼び出します。 コールバック関数は「現在の要素」と「そのインデックス」の2つの引数を受け取るものとします。コールバック関数がtrueを返した場合は対応する要素を出力配列に含め、そうでない場合は除外します。 実装例 以下が実際のコードです。 const arr = [5, 3, 6, 2, 7, -4, 8, 10]; const isEven = num => num % 2 =
-
JavaScriptで合計と最大公約数(GCD)から元の2つの数値を求める方法
問題2つの引数を受け取るJavaScript関数を作成する必要があります。1つ目の引数はある2つの数値の合計(sum)を、2つ目の引数はその2つの数値の最大公約数(GCD:HCF)を表します。関数の目的は、これらの条件を満たす元の2つの数値を見つけ出し、配列として返すことです。考え方(アプローチ)2つの数値の最大公約数が gcd であるとき、その2つの数値はどちらも必ず gcd の倍数になります。したがって、合計も必ず gcd の倍数でなければなりません。この性質を使うと、処理は次のようにシンプルにまとめられます。sum % gcd !== 0 の場合(合計がGCDで割り切れない場合)、条件を
-
JavaScriptで入力配列の末尾からn個の偶数を抽出して返す方法
問題数値の配列を第1引数として、数値を第2引数として受け取るJavaScript関数を作成します。この関数の役割は、入力配列の中から末尾側に近い方からn個の偶数を選び出し、それらを新しい配列として返すことです。たとえば、配列 [1, 2, 3, 4, 5, 6, 7, 8, 9] と数値 3 を渡した場合、期待される結果は [4, 6, 8] になります。実装例以下がそのコードです。const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const num = 3; const pickEvens = (arr = [], num = 1) => { c
-
JavaScriptで文字列内の最長連続文字とその出現回数を検索する方法
問題文字列を受け取り、その中で最も長く連続して現れる文字とその連続回数を返すJavaScript関数を作成する必要があります。戻り値は必ず2つの要素を持つ配列とします。1つ目の要素:文字列内で最も多く連続して登場する文字2つ目の要素:その文字が連続して登場した回数解決のアプローチこの問題は、文字列を先頭から1文字ずつ走査し、隣接する文字同士を比較することで解決できます。同じ文字が続いている間はカウントを増やし、異なる文字が出現した時点でカウントをリセットします。その際、これまでに記録した最大連続回数を上回っていれば、その文字と回数を結果として保存していきます。コード例以下が実際のコードです。c
-
JavaScriptで数値の最初のn個の倍数を含む配列を作成する方法
問題2つの数値、たとえば m と n を引数として受け取るJavaScriptの関数を作成する必要があります。この関数は、m の最初の n 個の倍数(自然数倍)を要素として持つ配列を構築し、返すものとします。例えば、m = 6、n = 14 の場合、期待される出力は以下の通りです。[ 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84 ]アプローチこの問題はシンプルです。1 から n までの各整数 i に対して「m × i」を計算し、その結果を順番に空の配列へ格納していきます。最後にその配列を返せば完成です。コード例以下が実際のコードです
-
JavaScriptで指定した範囲内にある「ある数で割り切れる数」の個数を求める方法
問題2つの整数からなる範囲(配列)を第1引数に、1つの数値を第2引数として受け取るJavaScript関数を作成する必要があります。この関数は、指定された範囲内に存在する「入力された数値で割り切れる数」をすべて見つけ、その合計個数を返します。サンプルコード以下がその実装例です。const range = [6, 57]; const num = 3; const findDivisibleCount = (num = 1, [l, h]) => { let count = 0; for(let i = l; i <= h; i++
-
JavaScriptで文字列から空白を削除し、指定した長さのチャンクに分割する方法
問題1番目の引数として空白を含む可能性のある文字列(文章)、2番目の引数として数値を受け取るJavaScript関数を作成する必要があります。この関数は、まず文字列からすべての空白文字を取り除き、その後、2番目の引数で指定された長さごとに文字列を分割します。すべてのチャンクは同じ長さになるようにします。ただし、最後のチャンクだけは例外的に、残りの文字数によって長さが異なる場合があります。コード例以下が実際のコードです。const num = 5; const str = 'This is an example string'; const splitString = (str
-
JavaScriptで文字列配列の各要素について、アルファベット上の位置と一致する文字数を数える方法
問題の概要英語の小文字アルファベットのみで構成された文字列の配列を受け取るJavaScript関数を作成することを考えます。この関数は、入力配列を新しい配列へとマッピングします。新しい配列の各要素は、元の文字列において「その文字の1始まりのインデックス(位置)」と「英語アルファベットにおける同じ文字の1始まりのインデックス」が一致している文字の個数を表します。たとえば、文字列「akcle」の場合、このカウントは 3 になります。これは、「a」「c」「e」の3文字が、文字列内でも1番目・3番目・5番目に位置し、アルファベット上でもそれぞれ1番目(a)、3番目(c)、5番目(e)に位置しているため
-
JavaScriptで昇順配列の中から並び順を壊している唯一の要素を見つける方法
この記事では、昇順(増加順)にソートされた数値の配列の中に、ただひとつだけ並び順を乱している要素がある場合に、その要素を特定して返すJavaScript関数の実装方法を解説します。 問題の定義 扱う配列は基本的に昇順でソートされていますが、その中の要素がひとつだけ順序から外れています。関数の目的は、その「異常な要素」を見つけ出して返すことです。 たとえば、次のような配列を考えます。 const arr = [1, 2, 3, 4, 17, 5, 6, 7, 8]; この配列から「17」を取り除けば残りは完全な昇順になるため、求める答えは「17」です。 解決のアプローチ 昇順の配列では、隣り合う
-
JavaScriptで2次元配列の各行の最小値の合計を求める方法
問題 数値を要素とする2次元配列を受け取るJavaScript関数を作成します。この関数は、配列の各行から最小値を1つずつ取り出し、最終的にそれらの合計を返す必要があります。 アプローチ 実装の手順は非常にシンプルです。 各行(部分配列)ごとに最小値を求める 求めた最小値を順番に加算していく 合計値を返す 行内の最小値の計算には、reduce() メソッドと Math.min() を組み合わせるのが便利です。 コード例 以下は実際のコードです。 const arr = [ [2, 5, 1, 6], [6, 8, 5, 8], [3, 6, 7, 5],
-
JavaScriptで指定した範囲内のnの倍数の最大値を求める方法
問題数値 n と上限値 b を引数として受け取り、次の条件をすべて満たす最大の整数 num を返すJavaScript関数を作成します。num は n で割り切れる(n の倍数である)num は b 以下であるnum は 0 より大きい例えば、n = 14、b = 400 の場合、400 以下の 14 の倍数の中で最も大きい値が答えとなります。解法1:ループを使ったシンプルなアプローチn から b まで順番に値を調べ、n で割り切れる数が見つかるたびに最大値を更新していく方法です。直感的で分かりやすいのが特徴です。const n = 14;const b = 400;const biggest
-
JavaScriptでスペースの位置を維持したまま文字列を反転させる方法
問題空白(スペース)を含む可能性のある文字列を受け取り、各単語の文字順だけを反転させるJavaScript関数を作成することを考えます。求められる条件は次のとおりです。単語内部の文字は逆順に並べ替える単語と単語を区切るスペースの位置は元のまま維持する異なる単語の文字同士が入れ替わらないようにするアプローチ基本となるアイデアは、「元の文字列を末尾から先頭へ向かって走査し、空白以外の文字を結果用の文字列へ追加していく」というものです。文字を追加するたびに、結果文字列の現在の長さをインデックスとして元の文字列を参照し、その位置がスペースであれば同じくスペースを結果に加えます。こうすることで、スペース
-
JavaScriptで配列内の文字列から連続する重複文字を削除する方法
問題 JavaScriptで、文字列の配列を引数として受け取る関数を作成することを考えます。この関数は、各文字列の中で連続して出現する重複した文字を削除し、処理後の新しい文字列の配列を返す必要があります。 たとえば「kelless」という文字列には「ll」や「ss」のように同じ文字が続く部分があるため、それぞれ1文字にまとめて「keles」に変換するイメージです。 解決策の例 以下は実際のコードです − { if (arr[index] !== arr[index+1]) { map.push(arr[index]);
-
JavaScriptで2つの文字列に共通しない文字を抽出して返す方法
問題2つの文字列を引数として受け取るJavaScript関数を作成することを考えます。この関数は、両方の文字列に共通して含まれていない文字、つまりどちらか一方の文字列にのみ存在する文字だけを抜き出し、それらをつなげた新しい文字列を返す必要があります。たとえば、xyab と xzca の2つの文字列が与えられた場合、共通する文字は x と a なので、結果として y、b、z、c を連結した ybzc を返すことになります。コード例以下がその実装コードです。const str1 = xyab; const str2 = xzca; const findUncommon = (str1 = , s
-
JavaScriptで虚数単位i(イオタ)のn乗の値を求める方法
問題 数値 n を受け取り、虚数単位 i の n 乗(in)の値を返すJavaScript関数を作成する必要があります。 ここで、虚数単位 i は次のように定義されます。 i = (-1)1/2 したがって、i のべき乗は以下のように4を周期として循環します。 i1 = i i2 = -1 i3 = -i i4 = 1(以降繰り返し) 解決のアプローチ i のべき乗は4回ごとに同じ値に戻るため、巨大な指数を実際に計算する必要はありません。そこで、剰余演算子(%)を使って n を 4 で割った余り を求め、その結果に応じて答えを判定します。 n % 4 === 0 → 「1」 n % 4 =
-
JavaScriptで各単語に含まれる数字をもとに文字列を並べ替える方法
問題文を表す文字列を引数として受け取り、その内容を並べ替えた結果を返すJavaScript関数を作成する必要があります。文中の各単語には必ず1つの整数が含まれています。この関数では、最も小さい数値を持つ単語を先頭に置き、残りの単語も数値の昇順に並ぶように文字列全体を並べ替えます。コード例以下が実際の実装コードです。 { return findNumber(a) - findNumber(b); }; arr.sort(sorter); return arr.join( ); }; console.log(sortByNumber(str));出力結果Th
-
JavaScriptで別の配列に含まれる要素の出現頻度を数える方法
問題今回は、2つの文字列配列を受け取るJavaScript関数を作成します。この関数は、2番目の配列に含まれる各文字列が、1番目の配列の中に何回出現するかをカウントし、その結果を配列として返す必要があります。例えば、1番目の配列に abc が2回含まれていれば、結果には 2 が出力されるイメージです。コード例以下は、二重ループを使用して出現回数をカウントするシンプルな実装例です。const arr1 = [abc, abc, xyz, cde, uvw]; const arr2 = [abc, cde, uap]; const findFrequency = (arr1 = [], arr2
-
JavaScriptで整数を素数のべき乗の積として表現する方法
本記事では、正の整数を受け取り、その数を素数のべき乗の積として表す文字列を返すJavaScript関数の作成方法を解説します。 問題の概要 任意の正の整数 n を引数として受け取り、次の形式の文字列を返す関数を実装します。 n = "(p1**n1)(p2**n2)...(pk**nk)" ここで p1〜pk は素因数となる素数、n1〜nk はそれぞれに対応する指数です。「a**b」は「a の b 乗」を意味します。 例 例として 86240 を渡した場合、この数は次のように素因数分解できます。 86240 = 25 × 5 × 72 × 11 したがって、期待される出