-
JavaScriptで各文字を隣接する文字に変更して回文を作成できるか判定する
問題文字列を引数として受け取り、以下の操作を行えるJavaScript関数を作成することを求められています。各文字は、必ずアルファベット上で1つ前または1つ後ろの文字に変更しなければなりません。「a」は「b」のみに、「z」は「y」のみに変更できます。これらの操作を適用した結果のうち、少なくとも1つが回文になれば true を、そうでなければ false を返す関数を実装してください。考え方回文になるためには、文字列の先頭から i 番目の文字と、末尾から i 番目の文字が一致している必要があります。しかし今回は各文字を ±1 の範囲でしか変更できないため、単純な一致判定では不十分です。そこで、対
-
JavaScriptで名・姓・任意のミドルネームからフルネームを組み立てる方法
課題3つの文字列を受け取るJavaScript関数を作成します。1つ目の引数は「名(first name)」、2つ目の引数は「姓(last name)」、そして3つ目の引数として任意(オプション)の「ミドルネーム」を渡します。この関数は、受け取った情報をもとに完全な氏名(フルネーム)を組み立てて返す必要があります。ポイントは、ミドルネームが渡されなかった場合でも正しく動作することです。解決のアプローチここでは次の手順で処理を行います。1. ミドルネーム引数が未定義(undefined)の場合は空文字列に置き換えます。2. 名・ミドルネーム・姓を配列に格納します。3. filter(Boolea
-
JavaScriptで幅とアスペクト比(幅:高さ)から高さを計算する方法
本記事では、画面の幅とアスペクト比(幅:高さ)を入力として受け取り、それに基づいて画面の高さを算出するJavaScript関数の実装方法を解説します。 問題 次の要件を満たすJavaScript関数を作成する必要があります。 第1引数として画面の幅を受け取る 第2引数としてアスペクト比(w:h の形式の文字列)を受け取る これら2つの入力値をもとに、画面の高さを計算して返す コード例 以下がその実装コードです。 { const [w, h] = ratio .split(:) &n
-
JavaScriptで配列の平均値を最も近い整数に丸めて取得する方法
この記事では、数値の配列を受け取り、その平均値を最も近い整数に丸めて返すJavaScript関数の実装方法を解説します。問題数値の配列を引数として受け取るJavaScript関数を作成する必要があります。この関数は、配列内の全要素の平均値を計算し、最も近い整数に丸めた結果を返します。また、空の配列が渡された場合でもゼロ除算エラーが発生しないよう、安全に処理できる設計にします。コード例以下がその実装コードです。const arr = [45, 23, 67, 68, 12, 56, 99]; const roundedMean = (arr = []) => { &
-
JavaScriptで数値の配列を対応する文字コードのオブジェクトへマッピングする方法
問題JavaScriptで、数値の配列を引数として受け取る関数を作成する必要があります。配列内の各数値に対して1つのオブジェクトを生成し、そのキーには対象の数値を文字列として、値には String.fromCharCode() によって変換した対応する文字を文字列として格納します。最終的に、これらのオブジェクトを要素として含む新しい配列を返します。コード例以下がその実装コードです。 { const res = []; for(let i = 0; i < arr.length; i++){ const el = arr[i]; const
-
JavaScriptの配列を数値は昇順、文字列はアルファベット順に並べ替える方法
問題数値と文字列が混在した配列を受け取り、数値を昇順に並べ替えた要素を先頭に、続けて文字列をアルファベット順に並べ替えた要素を配置した、単一の配列を返すJavaScript関数を作成します。重要な条件として、各要素は元のデータ型(数値・文字列)を維持したまま扱う必要があります。つまり、数値を文字列に変換したり、その逆を行ったりしてはいけません。入力例[5, 8, car, dad, amber, 1, 12, 76, bat]実装コード以下が実際のコードです。 { if(typeof a === number && typeof b === string){
-
JavaScriptで指定範囲内の特定の距離を持つk-素数ペアを見つける方法
k-素数(K-Prime)とは自然数のうち、素因数を重複込みで数えてちょうどk個持つものを「k-素数(k-prime)」と呼びます。たとえば4の場合、素因数は2だけですが、4 = 2 × 2 と分解できるため、2が2回カウントされます。このことから4は2-素数であるといえます。同様に、8 = 2 × 2 × 2 と3つの素因数に分解できるため、8は3-素数ということになります。問題の概要今回は、次の3つの引数を受け取るJavaScript関数を実装します。k:素因数の個数(重複込み)step:求めるペア間の距離(間隔)range:探索対象となる範囲[開始値, 終了値]この関数は、指定された範囲
-
JavaScriptで条件に応じて10進数を2進数または16進数に変換する方法
問題数値 n を引数として受け取る JavaScript 関数を作成する必要があります。この関数は、以下の条件に基づいて、受け取った数値を変換して返します。数値が偶数の場合 → 2進数に変換する数値が奇数の場合 → 16進数に変換する解決のアプローチまず、数値を2で割った余りが0かどうかを判定して、偶数か奇数かを確認します。その後、三項演算子を使って条件分岐を行い、toString() メソッドの引数に基数(2進数なら 2、16進数なら 16)を渡すことで、それぞれの進数表現に変換します。コード例const num = 1457;const conditionalConvert = (num
-
JavaScriptで符号なし32ビット整数をIPv4アドレスに変換する方法
問題まず、次のようなIPv4アドレスを例に考えてみましょう。128.32.10.1このアドレスを2進数に変換すると、以下のようになります。10000000.00100000.00001010.00000001さらに、この2進数を符号なし32ビットの10進数として表すと、次の値になります。2149583361つまり、10進数「2149583361」に対応するIPv4アドレスは「128.32.10.1」であると言えます。今回の課題は、32ビット符号なし整数を受け取り、それに対応するIPv4アドレスを返すJavaScript関数を作成することです。解決策コード例以下がその実装例です。const nu
-
JavaScriptで2つのIPアドレス間に存在するアドレス数を求める方法
問題2つのIPv4アドレスを引数として受け取り、その間に存在するIPアドレスの総数を返すJavaScript関数を作成します。ここでいう「間」とは、最初のアドレスを含み、最後のアドレスは含まない範囲を指します。IPv4アドレスは「0〜255の数値(オクテット)」を4つドットでつないだ構造になっており、各オクテットは256進法の1桁とみなすことができます。そのため、IPアドレス全体を1つの10進数に変換し、両者の差の絶対値を求めれば、間に存在するアドレス数を簡単に計算できます。考え方:オクテットごとの重み各オクテットには、左から順に次の重みが対応します。第1オクテット:2563(16,777,2
-
JavaScriptでルック・アンド・セイ数列の最初のn項を生成する方法
ルック・アンド・セイ数列とは 数学におけるルック・アンド・セイ(Look-and-Say)数列とは、次のように始まる整数列のことです。 1, 11, 21, 1211, 111221, 312211, … この数列では、前の項の数字を音読するように読み上げ、同じ数字が連続するグループごとに「連続する個数+その数字」をつなぎ合わせることで、次の項を生成します。 1211 の次の項を具体例で確認 たとえば 1211 を読み上げると、「1が1つ、2が1つ、1が2つ」となります。これをそのまま数字で表すと、次のようになります。 11 + 12 + 21 ⇒ 111221 したがって、1211 の次の項
-
JavaScriptで不正な時間文字列(HH:MM:SS)を正規化して修正する方法
JavaScriptでは、「HH:MM:SS」形式の時間文字列を扱う場面がよくあります。しかし、時間の加算処理などで計算ミスが発生すると、分や秒が60を超えてしまう「壊れた」時間文字列が生成されることがあります。この記事では、そうした不正な時間文字列を正しく正規化する方法を解説します。 課題:壊れた時間文字列とは 今回求められるのは、JavaScriptで「HH:MM:SS」形式の時間文字列を受け取り、必要な修正を加えた上で、正しい時間文字列として返す関数を作成することです。 問題になるのは、加算処理のバグによって、次のような不正な値が含まれてしまうケースです。 MM(分)の部分が60を超え
-
JavaScriptでカスタムURL短縮関数を自作する方法
課題今回は、以下の役割を持つ2つのJavaScript関数を実装することを求められます。1つ目の関数は、長いURL(long URL)を受け取り、それに対応する短いURL(short URL)を返します。2つ目の関数は、短いURLを受け取り、元のURLへリダイレクト(復元)します。これはいわゆるURL短縮サービス(bit.lyなど)の仕組みを簡易的に再現するもので、短縮キーの生成と元URLとのマッピング管理がポイントになります。コード例以下がその実装コードです。const url = https://www.google.com/search?client=firefox-b-d&q=
-
JavaScriptで数値を連続する奇数・偶数ごとに分割して配列として返す方法
問題 正の整数 n(n > 0)を引数として受け取り、その桁を「連続する奇数の並び」と「連続する偶数の並び」に分割した配列を返す JavaScript 関数を作成します。具体的には、数字を左から右へ読み進めながら、奇数から偶数へ(または偶数から奇数へ)切り替わる箇所で数値を区切ります。 たとえば入力が 124579 の場合、「1」は奇数、「24」は偶数、「579」は奇数であるため、出力は [1, 24, 579] となります。 解説 この問題は、次の手順で解くことができます。 数値を文字列化する: String(num) で数値を文字列に変換すれば、各桁にインデックスでアクセスできるよ
-
JavaScriptで単語と句読点の配列から文を作成する方法
問題単語と句読点が格納された配列を受け取り、それらを連結して1つの文を組み立てるJavaScript関数を作成する必要があります。文を組み立てる際は、以下の3つのルールに従う必要があります。単語と単語の間には必ずスペースを1つ入れるカンマと、その左側にある単語との間にはスペースを入れない文末にはピリオド(.)を必ず1つだけ付けるコード例以下が実際のコードです。const arr = [hey, ,, and, ,, you];const buildSentence = (arr = []) => { let res = ; &nbs
-
JavaScriptで数字列の中から最大の5桁の連続数字を見つける方法
問題少なくとも5桁以上の数字で構成される文字列を受け取るJavaScript関数を作成する必要があります。この関数は、与えられた数字列の中に含まれる「連続する5桁」の中で最も大きな数値を返さなければなりません。たとえば、入力が 123546544 の場合、取りうる5桁の組み合わせは「12354」「23546」「35465」「54654」「46544」となり、この中で最大のものは 54654 です。解決アプローチ考え方はシンプルです。文字列を先頭から1文字ずつずらしながら、5文字分を切り出す切り出したすべての5桁の部分文字列を配列に格納するMath.max() を使って最大値を求めるJavaSc
-
JavaScriptで配列から奇数以外の値を抽出して返す方法
問題 数値の配列を受け取るJavaScript関数を作成することを考えます。 この関数は、入力された配列に含まれる数値のうち奇数ではない要素だけを集め、それらを格納した新しい配列を構築して返す必要があります。 サンプルコード 以下がその実装例です。 const arr = [5, 32, 67, 23, 55, 44, 23, 12]; const findNonOdd = (arr = []) => { const res = []; for(let i = 0; i < arr.length; i++){ &n
-
JavaScriptで指定した長さの「1」と「0」が交互に並ぶ文字列を生成する方法
問題数値 n を引数として受け取るJavaScript関数を記述する必要があります。「1」から始まり、「1」と「0」が交互に並ぶ、長さ n の文字列を構築するのが目的です。コード例以下がその実装コードです。 { let res = ; for(let i = 0; i < num; i++){ if(i % 2 === 0){ res += 1; }else{ res += 0; }; }; return res; }; console.log(buildString
-
Array.prototypeを拡張するカスタムfind関数の実装方法
課題Arrayクラスのプロトタイプオブジェクト上に定義されるJavaScript関数を書く必要があります。この関数はコールバック関数を引数として受け取り、そのコールバックがtrueを返した最初の要素を返すものとします。また、現在処理中の要素を第1引数、現在のインデックスを第2引数として、コールバック関数に渡す必要があります。コード例以下が実際のコードです。const arr = [4, 67, 24, 87, 15, 78, 3]; Array.prototype.customFind = function(callback){ for(let i = 0; i &l
-
JavaScriptで配列を増加列に変換するために削除する要素数を最小化する方法
問題の概要 数字の配列を受け取り、残りの要素が左から右へ向かって値が増えていく「増加列」になるように、できるだけ少ない数の要素を削除する JavaScript 関数を作成します。 コード例 以下が実際のコードです。 const arr = [1, 100, 2, 3, 100, 4, 5]; const findIncreasingArray = (arr = []) => { // 元の配列を壊さないようコピーを作成 const copy = arr.slice(); // 隣り合う要素を順番に比較 for (let i = 0; i < copy.lengt