-
JavaScriptで小数点形式の文字列を昇順に並べ替える方法
まず、次のような文字列の配列を考えてみましょう。const arr = [ '.0', '.1', '.2', '.4', '.2.1', '.3', '.4.1', '.5', '.5.1.5' ];このような配列を引数として受け取り、一般の人が見て自然だと感じる順序、つまり昇順に並べ替えるJavaScript関数を作成します。ここでいう昇順とは、'.0' を先頭とし、続いて '.1'、'.2' という
-
JavaScriptの再帰ループで0から指定した数値までを出力する方法
本記事では、JavaScriptにおいて再帰呼び出し(recursion)のみを使って数値を出力する関数の書き方を解説します。この関数は引数として数値を受け取り、0からその数値までの連続した整数をコンソールへ出力します。for文やwhile文などのループ構文は一切使わず、純粋な再帰だけで実装するのが条件です。 サンプルコード コードは次のようになります。 const recursiveLoop = (counter) => { if (counter > 0) { recursiveLoop(counter
-
JavaScriptでカウントソートを実装する方法をわかりやすく解説
カウントソートとは? 今回は、数値の配列を受け取り、カウントソート(計数ソート)アルゴリズムを使って昇順に並べ替えるJavaScript関数を実装します。 配列の最大値が事前に分かっている場合、カウントソートを利用すれば線形時間・線形空間(O(n))で数値配列を並べ替えることができます。一般的な比較ベースのソート(クイックソートやマージソートなど)の計算量が O(n log n) であることを考えると、条件さえ揃えば非常に効率的な手法です。 アルゴリズムの流れ カウントソートは、以下の手順で動作します。 最大値の特定: まずループを1回実行し、配列内の最大の要素を見つけます。 カウント配列
-
JavaScriptで回文(パリンドローム)文字列を判定する関数の実装方法
今回は、文字列を引数として受け取り、その文字列が回文(パリンドローム)であれば true を、そうでなければ false を返す JavaScript 関数を作成します。回文とは?回文とは、前から読んでも後ろから読んでも同じ文字列のことを指します。例えば、以下のような文字列が回文に該当します。madamdadabcdcba条件今回の実装における唯一の条件は、組み込みの文字列メソッドを使用せず、文字列を配列に変換もしないことです。つまり、reverse() や split() といった便利なメソッドに頼らず、純粋なロジックだけで判定を行う必要があります。解決アプローチ:両端からの比較最も効率的な
-
JavaScriptで数値とその桁を逆順にした数との差を求める方法
本記事では、数値を1つだけ引数として受け取り、その数値の桁を逆順に並べ替えた数との差(絶対値)を返すJavaScript関数の実装方法を解説します。 関数の要件 作成する関数は、最初かつ唯一の引数として数値を受け取ります。この関数は次の処理を行う必要があります。 引数として渡された数値の桁を逆順に並べ替えた数を計算する 元の数値と逆順の数値の差の絶対値を返す 具体例 たとえば、入力される数値が次の場合を考えてみましょう。 const num = 45467; このとき、桁を逆順に並べた数値は「76454」になります。 したがって、期待される出力は次のとおりです。76454 − 45467
-
JavaScriptで2つの文字列がアナグラムかどうかを判定する方法
アナグラムとはアナグラムとは、片方の文字列の文字を並べ替えるともう片方の文字列と一致するような、文字列のペアのことを指します。例えば、「hello」と「lolhe」はアナグラムです。「lolhe」の文字を並べ替えれば「hello」を作ることができ、その逆も可能だからです。ここでは、2つの文字列(str1とstr2)を引数として受け取るJavaScript関数を作成します。この関数は、2つの文字列が互いにアナグラムである場合にtrueを、そうでない場合にfalseを返す必要があります。実装のアプローチとしては、各入力文字列について文字ごとの出現回数を記録したマップ(オブジェクト)を作成し、その2
-
JavaScriptで文字列内の各単語を反転させつつ、単語の順序はそのまま維持する方法
本記事では、文字列を引数として受け取るJavaScript関数を作成します。この関数は、文字列内の各単語を個別に反転させる役割を持ちます。ここでいう「単語」とは、両側が空白文字で囲まれている部分文字列、あるいは空白と文字列の先頭・末尾に挟まれた部分文字列を指します。関数は最終的に、処理後の新しい文字列を返します。例えば、入力文字列が以下の場合を見てみましょう。const str = This is a string;このとき、期待される出力は次の通りです。単語の中身だけが反転され、単語同士の順序は元のまま維持されている点に注目してください。const output = sihT si a gn
-
各単語の先頭文字を大文字に変換するJavaScript関数の実装方法
はじめに本記事では、文字列を受け取り、元の文字列に含まれる各単語の先頭文字だけを大文字に変換した新しい文字列を返すJavaScript関数の作成方法を解説します。このような処理は、見出しの整形や表示名の正規化など、Web開発のさまざまな場面で活用できます。要件たとえば、次のような入力文字列が与えられたとします。const str = this is some random string;この場合、期待される出力は以下のとおりです。const output = This Is Some Random String;コード例実際の実装は次のようになります。const str = this is s
-
JavaScriptで文字列を暗号化する方法|シーザー暗号のシフト実装
JavaScriptでは、第1引数に文字列、第2引数に数値を受け取る関数を実装することで、簡単な文字列暗号化を行うことができます。この記事で紹介するのは、いわゆる「シーザー暗号」と呼ばれる古典的な暗号方式です。仕組みは非常にシンプルで、文字列に含まれる各アルファベットを、指定された数だけアルファベット順にずらすことで暗号文を生成します。重要なのは、シフトがアルファベットの末尾(z)を超えた場合には先頭(a)に戻り、逆に先頭より前になった場合には末尾(z)へ折り返されるという点です。これにより、「a」の前が「undefined」などの無効な値になることなく、常に正しい文字へと循環します。実装例以
-
JavaScriptで正方行列の要素をスパイラル順に取得する方法
はじめに本記事では、二次元配列(必ず正方行列であるもの)を引数として受け取り、その要素をスパイラル(渦巻き)状に取り出して1次元配列として返すJavaScript関数の実装方法を解説します。まず、対象となる配列は以下のような形式です。const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];関数は位置(0, 0)からスタートし、外周に沿って時計回りに要素を取り出していきます。上記の配列の場合、期待される出力は次のとおりです。const output = [1, 2, 3, 6, 9, 8, 7, 4, 5];アルゴリズムの考え方この
-
エラトステネスのふるいを使ってJavaScriptで素数を求める方法
JavaScriptで、ある数値 n を受け取る関数を作成する必要があります。この関数は、1から n までの間に存在するすべての素数を配列として返します。アルゴリズムの考え方まず、与えられた数値と同じ大きさの配列を作成し、すべての値を true で初期化します。この配列のインデックスが「素数の候補」を表し、最初はすべてが素数候補(true)であるという状態になります。次に、2から与えられた数値の平方根まで繰り返す for ループを作成します。合成数(整数の積)は定義上素数になり得ないため、各 i の倍数にあたるインデックスを false に設定していきます。0 と 1 は、それらで割り切れるか
-
JavaScriptでマージソートを使って配列を再帰的にソートする方法
本記事では、数値の配列を受け取り、マージソート(Merge Sort)アルゴリズムを使ってその配列を昇順にソートするJavaScript関数を作成します。 マージソートとは マージソートは「分割統治法」に基づく代表的なソートアルゴリズムで、大きく分けて次の2つの処理から構成されます。 再帰的な分割: 配列を半分ずつに分割していき、最終的に要素が1つの状態まで細分化します。 反復的な統合(マージ): 分割された小さな配列同士を、大小関係を比較しながら正しい順序で結合していきます。 この手法により、平均・最悪ともに O(n log n) の時間計算量で安定したソートを実現できるのが特徴です。
-
JavaScriptで文字列内のスペースの数を数える方法
JavaScriptでは、スペースを含む文字列を受け取り、その中に含まれるスペースの数を数える関数を作成する必要がある場面があります。ここでは、その実装方法を解説します。例として、以下のような入力文字列が与えられた場合を考えます。const str = this is a string;この場合、期待される出力は次のとおりです。const output = 4;forループを使った基本的な実装最もシンプルな方法は、文字列を1文字ずつ確認し、スペースが見つかるたびにカウントを増やすことです。 { let count = 0; for (let i = 0; i < str.length;
-
JavaScriptで配列内の数値の組み合わせから目標値になる合計をすべて見つける方法
はじめに本記事では、数値の配列と目標となる合計値を受け取り、その合計値を作り出せる数値の組み合わせをすべて見つけるJavaScript関数の作成方法を解説します。要件作成する関数は、以下のように動作する必要があります。第1引数として数値の配列を受け取る第2引数として単一の数値(目標合計値)を受け取る配列から要素を選び、それらを加算したときに第2引数で指定された合計になる組み合わせを探す条件を満たすすべての部分配列を含む配列を返すなお、要素の順序は問わず、必要であれば同じ数値を複数回使用することも許容されます。入力例たとえば、入力の配列と合計値が次のような場合を考えてみましょう。const ar
-
【JavaScript】動的計画法で配列の部分和を効率的に求める方法
問題の概要次のような数値の配列があるとします。const arr = [1, 2, 3, 4, 5];この配列は、先頭から1つずつ要素を減らしながら、以下のように分割できます。[1, 2, 3, 4, 5][2, 3, 4, 5][3, 4, 5][4, 5][5][]今回作成するのは、このような配列を受け取り、上記の方法で配列を分割していくJavaScript関数です。さらに、分割された各部分ごとの合計値を要素として持つ新しい配列を構築し、それを返す必要があります。したがって、この配列の場合、期待される出力は次のようになります。const output = [15, 14, 12, 9, 5
-
JavaScriptで配列内の隣接する2要素の最大積を求める方法【サンプルコード付き】
本記事では、正負を問わず数値が格納された配列を受け取り、隣接する2つの要素の積の中で最大の値を返すJavaScript関数の作成方法を解説します。問題の概要たとえば、次のような入力配列が与えられたとします。const arr = [-23, 4, -3, 8, -12];この場合、期待される出力は次のとおりです。const output = -12;積が最大となる2つの要素は「4」と「-3」で、その積は -12 になります。負の数同士や正と負の組み合わせがあるため、単純に大きい数字同士を掛けるだけでは正解を導けない点がポイントです。解決策:サンプルコードconst arr = [-23, 4,
-
JavaScriptで数値が別の数値の累乗であるかを判定する方法
はじめに本記事では、2つの数値 m と n を引数として受け取り、m が n の累乗であるかどうかを判定する JavaScript 関数の実装方法を解説します。m が n の累乗であれば true を返し、そうでなければ false を返します。判定条件の例期待される動作は以下のとおりです。m = 8, n = 2 → true(8 = 2³) m = 100, n = 10 → true(100 = 10²) m = 0.01, n = 10 → true(0.01 = 10⁻²) m = 21, n = 3 → falseコード例const isPower = (m, n) => {
-
【JavaScript】配列内にn個連続する奇数が存在するかを判定する方法
問題の概要 本記事では、数値の配列を第1引数に、整数 n を第2引数として受け取り、配列の中に「n 個連続した奇数」が存在するかどうかを判定するJavaScript関数の作成方法を解説します。 この関数は、条件を満たす場合には true を、満たさない場合には false を返す仕様です。 たとえば、入力が次のようなケースを考えてみましょう。 const arr = [3, 5, 3, 5, 4, 3]; const n = 4; この場合の出力は true になります。理由は、配列の先頭から4つの要素(3, 5, 3, 5)がすべて奇数であるためです。 実装コード const arr =
-
JavaScriptで文字列内の繰り返し文字をカウントして出力する方法
例えば、次のような文字列があるとします。const str = aabbcde;この文字列には、aが2つ、bが2つ、そしてc・d・eがそれぞれ1つずつ含まれています。ここで求められているのは、このような文字列を受け取るJavaScript関数を作成することです。関数は「文字の出現回数+その文字」という形式で構成された新しい文字列を生成して返す必要があります。したがって、上記の文字列の場合、期待される出力は次のようになります。const output = 2a2b1c1d1e;実装例この問題を解く基本的なアプローチは以下の通りです。文字列を1文字ずつに分割し、sort()でアルファベット順に並べ
-
JavaScriptで数字根(デジタルルート)に基づいて配列をソートする方法
数字根(デジタルルート)とは数字根(デジタルルート)とは、正の整数を構成するすべての桁の数字を合計した値のことです。たとえば「13」であれば 1 + 3 = 4 となり、数字根は 4 になります。本記事では、整数の配列を受け取り、次のルールに従って並べ替えるJavaScript関数を作成します。要素 a が b より先に来るのは、a の数字根が b の数字根以下である場合。数字根が同じ場合は、通常の大小関係において小さい方の数値を先に配置する。たとえば、4 と 13 はどちらも数字根が「4」で等しいですが、4 < 13 であるため、両方を含む配列では常に 4 が 13 より先に並ぶことに