-
Node.jsのassert.deepStrictEqual()関数とは?使い方と使用例を解説
Node.jsのassertモジュールは、関数や値のアサーション(検証)に使用されるさまざまな機能を提供しています。その中のひとつがdeepStrictEqual()関数です。この関数は、actual(実際の値)とexpected(期待される値)の間の「深い厳密等価性」をテストします。オブジェクトの中身まで再帰的に比較し、データ型まで含めて完全に一致しているかどうかを判定します。条件が満たされない場合はAssertionError(アサーションエラー)が発生します。deepStrictEqual()の構文assert.deepStrictEqual(actual, expected[, mes
-
Node.jsのassert.doesNotThrow()関数の使い方と実行例をわかりやすく解説
assertモジュールは、関数のアサーション(値や動作の検証)を行うためのさまざまな機能を提供しています。その中のassert.doesNotThrow()は、「指定した関数がエラーをスローしないこと」を検証するためのメソッドです。このメソッドが呼び出されると、引数として渡されたfnが即座に実行されます。 もしfnがエラーをスローした場合、assert.doesNotThrow()はAssertionErrorを発生させます。逆に何もエラーがスローされなければ、検証は成功しプログラムはそのまま処理を続行します。 構文 assert.doesNotThrow(fn, [error], [mes
-
Node.jsのassert.equal()関数とは?使い方と実行例をわかりやすく解説
Node.jsのassert(アサート)モジュールは、関数のアサーション(値の検証)を行うためのさまざまな機能を提供する組み込みモジュールです。その中の一つがassert.equal()関数です。この関数は、実際の値(actual)と期待される値(expected)が等しいかどうかをテストするために使用され、条件が満たされない場合にはアサーションエラー(AssertionError)が発生します。構文assert.equal(actual, expected[, message])パラメータ各パラメータの詳細は以下の通りです。actual ― 実際に評価対象となる値です。expectedパラメ
-
Node.jsのassert.fail()関数とは?使い方と実行例を徹底解説
Node.jsのassertモジュールは、関数のアサーション(値や条件の検証)を行うための多彩な機能を提供しています。その中のassert.fail()関数は、条件のチェックを行うことなく、即座にアサーションエラーをスローする特殊な関数です。スローされるエラーには、デフォルトのメッセージ、または引数として渡した任意のメッセージが含まれます。テストを意図的に失敗させたい場合などに活用できます。構文assert.fail(message)パラメータ各パラメータの詳細は以下の通りです。message – 省略可能なパラメータです。関数が実行されたときに出力される、ユーザー定義の
-
JavaScriptでMapSumクラスを実装する:トライ木を使った接頭辞の合計計算
問題 本記事では、insert メソッドと sum メソッドを持つ MapSum クラスを実装していきます。 insert(key, val): キー(文字列)と値(整数)のペアを受け取ります。同じキーがすでに存在する場合は、既存のキーと値のペアが新しい値で上書きされます。 sum(prefix): 接頭辞(プレフィックス)を表す文字列を受け取り、その接頭辞で始まるすべてのキーに対応する値の合計を返します。 解決のアプローチ:トライ木(接頭辞木) この問題はトライ木(Trie/接頭辞木)というデータ構造を使うことで効率的に解くことができます。各ノードは1文字を保持し、子ノードへの参照をオ
-
【JavaScript】最長増加部分列(LIS)の総数を動的計画法で求める方法
問題数値の配列 arr を第1引数(唯一の引数)として受け取るJavaScript関数を作成することを考えます。この関数の目的は、その配列に含まれる最長増加部分列(連続・非連続を問わない)が何通り存在するかを求めることです。たとえば、次のような入力が与えられた場合を考えてみましょう。入力const arr = [2, 4, 6, 5, 8];出力const output = 2;出力の解説この配列における最長の増加部分列は [2, 4, 5, 8] と [2, 4, 6, 8] の2通りです。どちらも長さは4であるため、答えは 2 となります。アプローチ:動的計画法(DP)この問題は、動的計画
-
JavaScriptで配列を昇順(増加列)に変換できるか判定する方法
本記事では、整数型の配列を引数として受け取り、「要素を最大1つだけ変更することで配列を昇順(増加列)にできるか」を判定するJavaScript関数の実装方法を解説します。 増加列(Increasing Sequence)とは 配列が増加列であるとは、すべてのインデックス i(0 ≤ i ≤ n − 2)に対して、次の条件が成り立つことを指します。 arr[i] <= arr[i + 1] つまり、隣り合う要素を左から右へ見たときに値が減少することが一度もない(単調非減少=広義の昇順)状態のことです。等しい値が並んでいても問題ありません。 問題の定義 整数の配列 arr を第一引数(唯一の
-
JavaScriptで配列を連続する整数の部分列に分割できるか判定する方法
問題ソート済みの整数配列 arr を引数として受け取る JavaScript 関数を作成します。この関数は、配列を1つ以上の部分列(サブシーケンス)に分割でき、それぞれの部分列が連続した整数で構成され、長さが3以上である場合にのみ true を返し、それ以外の場合は false を返す必要があります。例として、関数への入力が以下であるとします。入力const arr = [1, 2, 3, 3, 4, 5];出力const output = true;出力の説明この配列は、次の2つの連続する部分列に分割できます。1, 2, 33, 4, 5それぞれの部分列が連続した整数(差が1ずつ増加)で構成
-
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
-
JavaScriptで最長のペアチェーンを見つける方法
問題数値ペア(組)の配列 arr を唯一の引数として受け取り、形成可能な最長チェーンの長さを返す JavaScript 関数を作成します。各ペアにおいて、最初の数値は必ず 2 番目の数値より小さいものとします。ここで、ペア (c, d) が別のペア (a, b) の後に続けられるのは、b < c が成り立つ場合に限られると定義します。このルールに従ってペアの連鎖(チェーン)を形成することができ、本関数はその中で最も長いチェーンの長さを求める必要があります。入力例const arr = [ [1, 2], [2, 3], [3, 4] ];出
-
JavaScriptで特定の長さを持つ部分配列の最大平均値を求める方法
問題概要整数の配列 arr を第1引数に、数値 num を第2引数として受け取るJavaScript関数を作成する必要があります。この関数の目的は、長さがちょうど num である連続する部分配列(サブアレイ)の中から、平均値が最大となるものを見つけ出し、その最大平均値を出力することです。入力例const arr = [1, 12, -5, -6, 50, 3]; const num = 4;出力例const output = 12.75;出力の解説このケースでは、求めるべき部分配列は [12, -5, -6, 50] です。これら4つの要素の合計は 51 となり、51 ÷ 4 = 12.75
-
JavaScriptで文字列内の文字を英字・数字・特殊文字に再グループ化する方法
問題文字列 str を第一引数(唯一の引数)として受け取る JavaScript 関数を作成する必要があります。この文字列には、次の3種類の文字が含まれる可能性があります。英字:(A-Z)、(a-z)数字:0〜9特殊文字:上記以外のすべての文字関数は文字列を先頭から順に走査し、ちょうど3つの要素からなる配列を構築します。1番目の要素には文字列に含まれるすべての英字、2番目には数字、3番目には特殊文字を格納し、それぞれ元の文字列内での出現順(相対的な順序)を維持します。最後にこの配列を返します。例えば、関数への入力が次の場合を考えてみましょう。入力const str = thi!1s is S@
-
JavaScriptで挿入ソートを実装して数値配列を昇順に並べ替える方法
挿入ソートとは挿入ソート(Insertion Sort)は、シンプルで直感的なソートアルゴリズムの一つです。配列を「整列済みの部分」と「未整列の部分」に分け、未整列部分の要素を一つずつ取り出して、整列済み部分の適切な位置に挿入していくことで全体を並べ替えます。データ量が少ない場合や、すでにほぼ整列されたデータに対しては非常に効率的に動作するため、実務でも場面を選んで活用されています。問題の概要今回は、JavaScript関数を作成します。この関数は、第一引数(唯一の引数)として数値の配列 arr を受け取ります。関数の役割は、挿入ソートのアルゴリズムを使用して、この数値配列を昇順(小さい順)に
-
【Node.js】agent.createConnection()メソッドの使い方を実例付きで解説
agent.createConnection()メソッドとはagent.createConnection()メソッドは、Node.jsのhttpモジュールが提供するインターフェースの一つです。このメソッドは、HTTPリクエストに利用できるソケット(socket)/ストリーム(stream)を生成します。カスタムエージェントを作成してこのメソッドをオーバーライドすれば、接続処理をより柔軟に制御することも可能です。ソケット/ストリームを返す方法は次の2通りあります。この関数から直接ソケット/ストリームをreturnで返すコールバック関数の引数としてソケット/ストリームを渡す構文agent.crea
-
JavaScriptで積がターゲット未満となる部分配列の個数を数える方法
問題数値の配列 arr を第1引数に、数値 target を第2引数として受け取るJavaScript関数を作成する必要があります。この関数は、部分配列に含まれるすべての要素の積が target よりも小さくなる「連続した」部分配列の個数を数えて返すものです。たとえば、関数への入力が次の場合を考えてみましょう。入力const arr = [10, 5, 2, 6]; const target = 100;出力const output = 8;出力の説明積が100未満となる8つの部分配列は次のとおりです。[10], [5], [2], [6], [10, 5], [5, 2], [2, 6],
-
JavaScriptで2つの文字列を一致させるための削除文字ASCII値合計の最小化
問題 本記事では、英小文字のみで構成された2つの文字列 str1 と str2 をそれぞれ第1・第2引数として受け取るJavaScript関数の作成方法を解説します。 この関数の目的は、2つの文字列を完全に等しくするために削除しなければならない文字のASCII値の合計を求め、そのうち最小となる値を返すことです。 例として、関数への入力が以下の場合を考えてみましょう。 入力 const str1 = 'sea'; const str2 = 'eat'; 出力 const output = 231; 出力の解説 まず、「sea」から「s」を削除すると、「s」のAS
-
JavaScriptで配列を出現頻度の昇順に並べ替える方法
問題数値の配列 arr を唯一の引数として受け取るJavaScript関数を作成する必要があります。配列 arr には重複した要素が含まれている可能性があります。この関数では、出現回数が少ない要素から順に配列を並べ替えます。つまり、出現頻度の低い要素を先頭に配置し、頻度の昇順に沿って残りの要素を並べていきます。なお、出現回数が同じ要素が複数存在する場合は、それらを値の昇順(小さい順)に配置する必要があります。入力例const arr = [5, 4, 5, 4, 2, 1, 12];出力例[1, 2, 12, 4, 4, 5, 5]出力の解説数値「1」「2」「12」はそれぞれ1回しか出現しない
-
【JavaScript】最大頻度と同じ度数を持つ最短の連続部分配列の長さを求める方法
問題概要本記事では、数値の配列 arr を引数として受け取るJavaScript関数を作成します。この関数が求めるのは、「配列全体における任意の要素の最大出現頻度(度数)と同じ頻度を持つ連続した部分配列」のうち、最も短いものの長さです。入出力の例たとえば、関数に次の配列を渡した場合を考えてみましょう。入力const arr = [55, 77, 77, 88, 55];出力const output = 2;出力の解説この入力配列では、要素 55 と 77 がそれぞれ2回出現しているため、最大出現頻度は 2 となります。そして、最大頻度と同じ頻度を持つ部分配列の中で最も短いものの長さは 2 です
-
JavaScriptで整数のビットが交互になっているかを判定する方法
問題整数 num を唯一の引数として受け取るJavaScript関数を作成することを考えます。この関数の役割は、num の2進数表現におけるビットが「交互(オルタネーティング)」になっているかどうかを判定することです。つまり、隣り合うビットが常に異なる値を持つかどうかを確認します。例として、関数に次の入力を与えた場合を見てみましょう。入力const num = 5;出力const output = true;出力の説明5 の2進数表現は 101 であり、0と1が交互に並んでいるため、結果は true となります。解決アプローチ①:2進数の文字列を走査する最も直感的な方法は、数値を2進数の文字列
-
【JavaScript】配列内で最も頻出する単語を上位N件抽出する方法
問題概要英小文字のみで構成された文字列の配列 arr を第一引数として受け取り、数値 num(num は配列の長さより小さい値)を第二引数として受け取る JavaScript 関数を作成します。この関数は、配列 arr 内で最も頻出する要素を上位 num 件返す必要があります。結果は出現回数が多い順に並べます。また、出現回数が同じ単語が複数ある場合は、辞書順(アルファベット順)で先に来る単語を優先して並べます。入力例const arr = [the, day, is, sunny, the, the, the, sunny, is, is]; const num = 4;出力例const ou