-
JavaScriptで文字列内の単語をマスキング(暗号化)する方法
本記事では、JavaScriptを使って文字列中の単語を特定のルールに従って変換・マスキングする方法を解説します。フィルタリングや検閲処理などで役立つテクニックです。問題の概要文字列を受け取るJavaScript関数を作成します。この関数は、以下のルールに従って文字列を変換する必要があります。すべての単語を大文字にする各単語の末尾に「!!!!」を付ける「a」または「A」は「@」に置き換えるその他の母音(e、i、o、u)は「*」に置き換える実装コード以下が実際のコード例です。const str = ban censored words; const maskWords = (str = ) =&
-
JavaScriptで文字列の母音と子音をシフトする関数を実装する方法
問題 英語のアルファベットで構成された文字列を受け取り、新しい文字列を生成するJavaScript関数を作成する必要があります。具体的なルールは次のとおりです。 すべての子音は、アルファベット上で9文字分先へ進めます。「z」を超えた場合は「a」に戻って続けます(ラップアラウンド処理)。 すべての母音は5文字分移動させます。本記事のコードでは「(現在のインデックス + 21) % 26」で計算しており、これはアルファベット上で5文字分後ろへ戻ることと同じ結果になります。 コード例 以下がその実装例です。 legend.includes(char); // 英字の判定 let re
-
JavaScriptで数値の配列をアルファベットの文字列に変換する方法
問題数値の配列を引数として受け取るJavaScript関数を作成する必要があります。この関数は、ハイフン(-)で区切られた次の4つの部分から成る1つの文字列を返さなければなりません。配列の先頭2つと末尾2つの数値から導かれる4文字の「単語」。並び順は左から右に読む順(先頭、2番目、末尾から2番目、末尾)とする。同じ処理を、配列を昇順にソートした後に行ったもの。同じ処理を、配列を降順にソートした後に行ったもの。同じ処理を、配列をASCII文字に変換してアルファベット順にソートした後に行ったもの。この4つの部分をつなぎ合わせて1つの文字列とし、各部分の間はハイフン(-)で区切ります。コード例以下が
-
JavaScriptで特定のサイズのバイナリスパイラル配列を作成する方法
問題の概要数値 n を受け取るJavaScript関数を作成します。この関数は N × N の順序を持つ2次元配列(ネストされた配列)を構築して返します。配列の中で、1 は [0, 0] の位置から始まる渦巻き状(スパイラル)の位置すべてに配置され、それ以外の位置には 0 が入ります。例えば、n = 5 の場合、出力は次のようになります。[ [ 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 1 ], [ 1, 1, 1, 0, 1 ], [ 1, 0, 0, 0, 1 ], &nb
-
JavaScriptで目標の平均値を達成するために必要な数値を求める方法
この記事では、JavaScriptを使って「配列にあと1つ数値を追加したときに、その平均値が指定した目標値と一致するような数」を求める方法を解説します。 問題の概要 数値の配列と、単一の数値(目標平均値)を受け取るJavaScript関数を作成します。 この関数は、その数値を配列に追加することで、配列全体の平均が第2引数で指定された値と等しくなるように、追加すべき数値を返す必要があります。 解決の考え方 平均値の定義に立ち返ると、答えは簡単な算術で導き出せます。 まず現在の配列の合計値を求めます。 新しい要素を1つ追加すると、配列の長さは「元の長さ + 1」になります。 目標平均 × 新しい
-
【JavaScript】隣接する2つの要素の最大積を求める方法
問題 数値の配列を受け取るJavaScript関数を作成します。 この関数は、配列内の隣接する2つの要素を掛け合わせた積の中から、最大値を見つけて返す必要があります。 コード例 以下がその実装コードです。 const arr = [9, 5, 10, 2, 24, -1, -48]; function adjacentElementsProduct(array) { let maxProduct = array[0] * array[1]; for (let i = 1; i maxProduct) maxProduct = product;
-
JavaScriptで最も近い周囲長を持つ「ほぼ二等辺三角形」を求める方法
ほぼ二等辺整数三角形(Almost Isosceles Triangle)とは? 「ほぼ二等辺整数三角形」とは、3辺の長さがすべて整数で構成されており、そのうち2つの辺の長さの差がちょうど1単位となっている特殊な三角形のことです。一見すると二等辺三角形のように見えますが、厳密には2辺が等しくない点が大きな特徴です。 問題の概要 ここで求められているのは、三角形の周囲長(3辺の長さの合計)を指定する数値を引数として受け取り、その周囲長に最も近い「ほぼ二等辺三角形」の3辺の測定値を見つけ出して返すJavaScript関数を記述することです。 たとえば、目的とする周囲長が500である場合、それに最
-
JavaScriptで配列の合計値が偶数か奇数かを判定する方法
本記事では、配列内の全要素の合計を求め、その結果が偶数か奇数かに応じて文字列を返すJavaScript関数の実装方法を解説します。 問題 整数の配列 arr を引数として受け取るJavaScript関数を作成する必要があります。この関数は、配列内のすべての要素の合計が奇数であれば文字列「odd」を、偶数であれば文字列「even」を返すようにします。 解決のアプローチ まず、配列メソッドの reduce() を使って配列全体の合計値を算出します。次に、合計値を 2 で割った余り(剰余演算子 % の結果)が 0 かどうかをチェックすることで、偶数・奇数の判定を行います。 コード例 以下が実際のコ
-
JavaScriptで配列内のすべてのゼロを末尾に移動する方法
問題概要 JavaScriptで、数値などのリテラルを含む配列を受け取る関数を作成することを考えます。この配列には、いくつかの0(ゼロ)が含まれている可能性があります。求められているのは、すべてのゼロを配列の末尾へ移動させると同時に、ゼロ以外の要素の相対的な順序は元のまま維持するという処理です。 解決策のコード例 以下がその実装コードです。 { const res = []; let currIndex = 0; for(let i = 0; i < arr.length; i++){ const el = arr[i]; if(el === 0){
-
JavaScriptでn組の括弧をバランスよく組み合わせる全パターンを生成する方法
問題数値 n を引数として受け取るJavaScript関数を作成する必要があります。この関数は、n組の丸括弧「(」「)」を正しくバランスさせた文字列のパターンをすべて含む配列を返します。例えば、n = 3 の場合の出力は次のとおりです。["()()()","(())()","()(())","(()())","((()))"]アルゴリズムの考え方この問題は、再帰呼び出し(バックトラッキング)を使うことで効率的に解くことができます。ポイントは、次の2つの変数で状態を管理することです。left:まだ
-
JavaScriptで2つの配列間の欠落した数値を見つける方法
問題の概要 2つの配列 arr1 と arr2 を引数として受け取るJavaScript関数を作成します。 arr2 は arr1 の要素をシャッフルした複製ですが、たった1つの要素だけが欠落しています。 この関数の目的は、その欠落している1つの要素を見つけ出して返すことです。 アプローチのポイント 最もシンプルかつ効率的なのは、ハッシュマップ(オブジェクト)を使って各数値の出現回数を記録する方法です。計算量は O(n) に抑えられ、配列内に重複した値が含まれていても正しく動作します。 コード例 以下が実際のコードです。 const arr1 = [6, 1, 3, 6, 8, 2];
-
JavaScriptでarr[i] <= arr[j]を満たす最大のインデックス差(j - i)を求める方法
問題数値の配列 arr を受け取るJavaScript関数を作成します。この関数は、arr[i] <= arr[j] を満たす組み合わせの中から、j - i の差が最も大きくなる値を返す必要があります。つまり、「前方の要素が後方の要素以下である」という条件を満たす、2つのインデックス間の最大距離を求めるという問題です。解決アプローチ最もシンプルな方法は、ネストされたループを使ってすべてのインデックスのペア (i, j) を調べることです。各ペアについて arr[i] <= arr[j] が成立するかどうかを確認し、その差 j - i が現在の結果より大きければ更新していきます。コー
-
【JavaScript】配列内のすべての単語をメッシュ化して、つなぎの文字を取得する方法
問題 2つの単語は、最初の単語の末尾の部分文字列が次の単語の先頭の部分文字列と一致するとき、「メッシュ(連結)」できると言えます。たとえば、「robinhood」と「hoodie」は「hood」という部分でつながるため、メッシュ化が可能です。 この記事では、文字列の配列を受け取るJavaScript関数を作成します。配列内のすべての単語が順番にメッシュ化できる場合は、つなぎとなる共通部分を連結した文字列を返し、1組でもつながらないペアがあれば空文字列を返すようにします。 アルゴリズムの考え方 隣接する2つの単語をスペースで連結した文字列に対し、後方参照を使った正規表現 /(.+) \1/ を
-
JavaScriptで配列内の正の数だけを合計する方法
問題正と負の数値が混在した配列を受け取り、その中に含まれる正の数すべての合計を計算して返すJavaScript関数を作成する必要があります。たとえば、[5, -5, -3, -5, -7, -8, 1, 9] という配列が与えられた場合、正の数は 5、1、9 の3つなので、期待される出力は 15 となります。解決コード以下がその実装例です。const arr = [5, -5, -3, -5, -7, -8, 1, 9]; const sumPositives = (arr = []) => { const isPositive = num => type
-
JavaScriptで文字列から句読点・特殊文字を削除する方法
問題文字列を受け取り、その中からすべての句読点や特殊文字を取り除き、結果の文字列には英字と数字だけを残すJavaScript関数を作成する必要があります。入力const str = th@is Str!ing Contains 3% punctuations;出力const output = thisStringContains3punctuations;これは、すべての句読点(記号)と空白を削除したためです。コード例以下がその実装例です。const str = th@is Str!ing Contains 3% punctuations; const removeSpecialChars =
-
JavaScriptでバラバラの数字名から数字を復元する方法
問題 次のように、数字の英語名の文字が混ぜ込まれた文字列があるとします。 const str = 'TOWNE'; この文字列をよく観察すると、文字を組み合わせることで「TWO(2)」と「ONE(1)」という2つの数字名が見つけられます。 したがって、この場合に期待される出力は「21」です。 今回の課題は、このような文字列を引数として受け取り、その中に隠れている数字を検出して返すJavaScript関数を記述することです。 解き方のアプローチ この問題は、以下の手順で解決できます。 0〜9の各数字名(ZERO、ONE、TWOなど)について、考えられるすべての並べ替え(順列
-
JavaScriptで数値を反転して桁ごとの配列に分割する方法
問題概要数値を1つ受け取るJavaScriptの関数を作成する必要があります。この関数は、まず受け取った数値を反転させ、その反転した数値を1桁ずつに分割して、その配列を返すものとします。入力const num = 1234567;出力const output = [7, 6, 5, 4, 3, 2, 1];これは、反転後の数値が7654321になるためです。実装例以下がそのコードです。const num = 1234567; const reverseAndSplit = (num = 1) => { const numStr = String(num); &n
-
【JavaScript】投稿に「いいね」したユーザーの名前を表示する関数の実装方法
問題SNSなどでよく見かける「〇〇さん、△△さん、他N人が『いいね!』しました」といった表示。本記事では、特定の投稿に「いいね」を付けたユーザーの名前が格納された配列(文字列)を受け取り、人数に応じて適切なメッセージを返すJavaScript関数の実装方法を解説します。求められる仕様は以下のとおりです。0人の場合:「no one likes this」を返す1人の場合:「◯◯ likes this」を返す2人の場合:「◯◯ and △△ like this」を返す3人の場合:「◯◯, △△ and □□ like this」を返す4人以上の場合:最初の2名の名前と残りの人数を組み合わせた「◯◯
-
JavaScriptでブール論理ゲート(AND・OR・XOR)を計算する関数の実装方法
問題 今回は、ブール値(true / false)の配列と論理演算子を受け取り、配列内の各要素へその演算子を順番に適用して、最終的なブール値を返すJavaScript関数を作成する必要があります。 対応する論理演算子は以下の3種類です。 AND(論理積):すべての値が true の場合のみ true を返す OR(論理和):いずれかの値が true であれば true を返す XOR(排他的論理和):隣り合う値が異なる場合に true を返す コード例 以下がその実装コードです。 const array = [true, true, false]; const op = AND; func
-
JavaScriptで数値を反転する方法|負の数の符号を保持しながら桁を逆順にする
課題今回は、数値を引数として受け取り、その桁を逆順に並べ替えた数値を返すJavaScript関数を作成します。実装時に注意すべき重要なポイントがあります。それは元の数値の符号を保持することです。つまり、負の数を反転させた場合でも、結果は必ず負の数のまま返されなければなりません。コード例以下がその実装コードです。 0) { y = y * 10 + (x % 10); x = Math.floor(x / 10); } return Math.sign(n) * y; } console.log(reverseNumber(num));出力結果-