-
JavaScriptで指定した範囲内の自然数の配列を生成して返す方法
はじめにこの記事では、[a, b](a ≤ b)という形式の2つの数値からなる配列を受け取り、a から b までのすべての自然数(両端の値を含む)を要素とする配列を返す JavaScript 関数の実装方法を解説します。問題作成する関数は、範囲を指定する配列 [a, b](ただし a ≤ b)を引数として受け取り、その範囲に含まれるすべての自然数を配列として返す必要があります。境界値である a と b 自身も結果に含める点がポイントです。サンプルコード以下が基本的な実装例です。const range = [6, 45]; const naturalBetweenRange = ([lower,
-
JavaScriptでDNA配列をRNA配列へ変換する方法
DNAとRNAの関係デオキシリボ核酸(DNA)は、生物システムにおける主要な遺伝情報の保存分子です。DNAはグアニン(G)、シトシン(C)、アデニン(A)、チミン(T)という4つの核酸塩基から構成されています。一方、リボ核酸(RNA)は細胞内で主要なメッセンジャーとして機能する分子です。RNAは化学構造においてDNAとわずかに異なり、チミンを含みません。代わりに、RNAではチミンの位置にウラシル(U)という別の核酸塩基が使用されます。課題ここでは、与えられたDNA文字列を対応するRNA文字列に変換するJavaScript関数を作成します。変換のルールは非常にシンプルで、DNA文字列中のすべての
-
【JavaScript】バスに乗りきらなかった乗客の人数を計算する方法
問題次の3つの引数を受け取るJavaScript関数を書く必要があります。cap − 運転手を除いた、バスの乗車定員(乗れる人数)on − 運転手を除いた、現在バスに乗っている人数wait − 運転手を除いた、乗車待ちをしている人数空きスペースが十分にある場合は 0 を返し、全員を乗せきれない場合は、乗せられなかった乗客の人数を返します。考え方まず「乗っている人数+待っている人数」で乗車希望者の合計を求め、それが定員(cap)を上回るかどうかを判定します。上回っていれば、その差分こそが乗せられない人数になります。差分がマイナスになることは本来ありませんが、安全のため 0 未満になった場合は 0
-
JavaScriptで文字列内のアルファベットを10文字分シフトする方法
問題英語のアルファベットで構成された文字列を引数として受け取り、すべてのアルファベットを10文字分だけ前に進めるJavaScript関数を作成する必要があります。ただし、進めた結果が「z」を超えた場合は、「a」に戻って再度カウントを続けます。これはいわゆる「シーザー暗号」の一種であり、文字コード(ASCIIコード)と剰余演算(% 演算子)を組み合わせることで、簡潔かつ効率的に実装できます。コード例以下がその実装コードです。 ( ch.toLowerCa
-
JavaScriptで長方形内に埋め込まれた正方形の周囲長の合計を求める方法
問題 下図のように、1つの長方形の中に正方形が5つ埋め込まれている状況を考えてみましょう。 このとき、それぞれの正方形の周囲長は次のようになります。 4 + 4 + 8 + 12 + 20 = 48 単位 一見すると複雑な計算が必要そうに思えますが、よく観察すると各正方形の一辺の長さがフィボナッチ数列(1, 1, 2, 3, 5, ...)に従っていることが分かります。つまり、n個の正方形が埋め込まれている場合、周囲長の合計は「最初のn項のフィボナッチ数の総和 × 4」で求められるのです。 そこで本記事では、数値 n を引数として受け取り、n個の正方形が埋め込まれた場合の周囲長の合計を返す
-
JavaScriptで数字を回転させて最大の数を取得する方法
問題 正の整数 n を引数として受け取り、その数字の桁を回転させることで得られる数の中から最大の数を返すJavaScript関数を作成します。ここでは、数値を1桁ずつに分解した配列を操作しながら複数の候補を生成し、その都度比較を行うことで最大値を導き出します。 サンプルコード 以下のコードをご覧ください。 const num = 56789; const findMaximum = (num = 1) => { let splitNumbers = num.toString().split(""); &nb
-
JavaScriptで二項式 (ax+b)^n を展開する方法
問題 (ax+b)n の形式で書かれた式を受け取り、その展開形を文字列として返すJavaScript関数を作成する必要があります。ここで a と b は正または負の整数、x は任意の一文字の変数、n は自然数です。なお、a = 1 の場合は変数の前に係数を付けません。 関数は ax^b+cx^d+ex^f… のような形式の文字列を返します。a・c・e は各項の係数、x は元の式で渡された一文字の変数、b・d・f は各項における x の指数で、指数は降順に並べます。 コードのポイント この実装は、おおむね次のような流れで処理を行っています。 式の解析: 正規表現 /(\W)(\d*)(\w)
-
【JavaScript】0〜nの各数値の2乗に含まれる特定の桁の出現回数を数える方法
問題の概要今回は、整数 n(n >= 0)と桁の数字 d(0 <= d <= 9)を引数として受け取る JavaScript 関数を作成します。この関数は、0 から n までのすべての数値 k(0 <= k <= n)についてそれぞれ 2 乗を計算し、その結果(k**2)を書き表したときに現れる桁 d の出現回数の合計を返すものです。たとえば n = 25、d = 1 の場合、「1, 16, 100, 121, 144, 169, 196, 361, 441」などの 2 乗値の中に含まれる「1」の個数をすべて合計することになります。サンプルコード以下が実際の実装コ
-
JavaScriptで部屋の壁を覆うのに必要な壁紙(シート)のロール数を計算する方法
問題ここでは、部屋の長さ・高さ・幅を引数として受け取るJavaScript関数を作成する必要があります。この関数は、1ロールのシートの幅が 0.52単位、長さが 10単位 であるという前提のもとで、部屋全体(4面の壁)を覆うために必要なシートのロール数を計算します。また、利便性を考慮し、実際に必要な長さに対して 15% の余裕をもたせたロール数を返すものとします。計算の考え方必要なロール数は、次の手順で求められます。① 床面の周囲の長さに高さを掛けて、4面の壁の合計面積を算出する② シートの幅×長さから、1ロールあたりの面積を求める③ 壁の総面積をロールの面積で割り、15%の余裕を加えたうえで
-
JavaScriptで迷路の終点への経路を見つける方法
問題 N×N の正方行列で表される迷路が与えられます。壁は W、通行可能な空きマスは _ で表され、移動は上下左右の4方向がいつでも可能です。 この迷路の左上 [0, 0] からスタートし、右下の終点 [N - 1, N - 1] にたどり着けるかどうかを判定する JavaScript 関数を作成します。到達できる場合は true、できない場合は false を返します。 アプローチ:幅優先探索(BFS) 迷路のような「到達可能性」を求める問題には、幅優先探索(BFS)が適しています。キューを使って探索対象のマスを順番に処理しながら、訪問済みのマスを別の文字(ここでは #)で上書きすることで、
-
JavaScriptで預金額が目標金額に達する日付を計算する方法
問題2021年1月1日に、ある金額(amt > 0)を年利 p% で預け入れる状況を考えます。利息は年間360日換算で日割りされ、毎日残高に加算されるものとします。このとき、元利合計(total)が目標金額(a0)以上になるまで何日かかるかを求めたいと考えています。今回作成する関数は、元本・目標金額・利率という3つのパラメータを受け取り、残高が目標金額に到達する日付を返します。コード例以下が実際のコードです。const principal = 100; const amount = 150; const interest = 2; const findDate = (principal,
-
JavaScriptで文字列をアルファベット順に並べ替え、各文字を「***」で区切る方法
問題今回は、文字列の配列を受け取るJavaScript関数を作成します。この関数が満たすべき要件は以下のとおりです。配列内の文字列をアルファベット順に並べ替える。並べ替えた後の最初の文字列を取得する。その文字列の各文字を「***」で区切って返す。コード例実際のコードは次のようになります。const arr = [this, is, some, string, array]; const specialSort = (arr = ) => { // 元の配列を変更しないようコピーを作成 cons
-
JavaScriptで数値配列内の母音(ASCIIコード)を判定して置換する方法
問題 ここで求められているのは、数値の配列を受け取るJavaScript関数を作成することです。配列の中に、ASCIIコードとして母音(a・e・i・o・u)に該当する数値が存在する場合、その数値を対応する母音の文字に置き換え、変換後の新しい配列を返す必要があります。 考え方 ASCIIコードでは、小文字の母音はそれぞれ「a」= 97、「e」= 101、「i」= 105、「o」= 111、「u」= 117 に対応しています。そこで、String.fromCharCode() を使って各数値を文字に変換し、その文字が母音かどうかを判定すればよいわけです。母音に一致した要素だけを文字へ置き換えます
-
【JavaScript】配列内の連続するn個の文字列を結合して最長の文字列を求める方法
問題概要 文字列の配列と整数 n を受け取り、配列内の「連続する n 個の文字列」をすべて組み合わせて結合した文字列の中から、最も長いものを返す JavaScript 関数を作成します。同じ長さの候補が複数存在する場合は、最初に出現したものを返すのがポイントです。 実装のポイント 入力チェック: 配列が空である、n が配列の長さを超えている、または n が 0 以下の場合は空文字列 を返します。 部分配列の抽出: Array.prototype.slice(i, i + k) を使って、各位置から連続する k 個の要素を取り出します。 結合と比較: join() で結合した文字列の長さを
-
JavaScriptで3桁の数字を並べ替えて最大の数を作る方法
問題正の3桁の整数を1つ引数として受け取り、その各桁を並べ替えることで作れる最大の数を返すJavaScript関数を作成する必要があります。アプローチこの問題は、次の手順で解決できます。まず、入力された数値が実際に3桁であるかを検証します。100未満または999を超える場合は null を返します。数値を文字列に変換し、split() で1文字ずつの配列に分解します。sort((a, b) => b - a) を使って桁を降順に並べ替えます。これにより、大きい桁が先頭に来ます。join() で配列を文字列に結合し、単項プラス演算子(+)で数値型に戻して返します。コード例以下は上記のアプロ
-
JavaScriptで文字列に含まれる「輪」の数を数える方法
問題 英語のアルファベットからなる文字列を受け取り、その中に含まれる「輪(リング)」の総数を数えるJavaScript関数を作成する必要があります。 ここでいう「輪」とは、各文字がもつ閉じたループ(穴)のことを指します。たとえば、「A」「D」「O」「P」「Q」「R」「a」「b」「d」「e」「g」「o」「p」「q」などの文字は輪を1つ持ち、「B」は輪を2つ持ちます。一方、「L」「T」「F」「s」などの文字には輪が存在しません。 解決のアプローチ この問題は、以下の手順で解くことができます。 輪を1つ持つ文字のリストと、輪を2つ持つ文字のリストをあらかじめ定義しておきます。 対象の文字列を1
-
JavaScriptで隣接する文字が重複しないようにするための最小削除文字数を求める方法
問題A・B・C の3種類の文字のみで構成された文字列を受け取る JavaScript 関数を作成する必要があります。この関数の目的は、隣接するどの2文字も必ず異なる状態にするために、文字列から削除する必要がある文字の最小数を求めることです。アプローチこの問題は、文字列を先頭から順に走査し、隣接する2文字が同じであれば1文字を削除するというシンプルな方法で解決できます。具体的な手順は以下のとおりです。文字列を split() メソッドで1文字ずつの配列に変換します。配列を先頭から順に走査し、現在の文字と次の文字が一致した場合は、削除カウントを1増やしてその文字を配列から取り除きます。splice
-
JavaScriptで配列の3番目に小さい数値を求める方法
問題の概要JavaScriptの関数を作成する必要があります。この関数は、長さが3以上の数値配列を引数として受け取ります。そして、その配列の中から3番目に小さい数値を返すことが求められます。解決アプローチこの問題は、以下の手順で解くことができます。元の配列を破壊しないように、slice()メソッドでコピーを作成します。ループを使って、最小値を2回取り除きます。Math.min(...copy)で最小値を見つけ、indexOf()でその位置を特定し、splice()で削除します。残ったコピー配列の最小値が、元の配列の3番目に小さい数値となります。サンプルコード以下は実際のコード例です。const
-
JavaScriptでユーザーに応じたパーソナライズされた挨拶メッセージを返す方法
課題の概要今回取り上げるのは、2つの文字列を引数として受け取るJavaScript関数の作成です。1つ目の引数はユーザー名、2つ目はオーナー名を表します。関数に求められる動作は以下のとおりです。ユーザー名とオーナー名が一致する場合 → 「Hello master」を返す一致しない場合 → 「Hello ユーザー名」という形式のメッセージを返すサンプルコード実際のコードを見てみましょう。const name = arnav; const owner = vijay; function greet(name, owner) { if (name =
-
JavaScriptで数式を英単語の読み方に変換する関数の実装方法
問題 数式を表す文字列(例:「5 - 8」)を受け取り、その式を英語の単語による読み方(例:「Five Minus Eight」)に変換して返すJavaScript関数を作成します。 対応する演算子は以下の通りです。 + : Plus(足す) - : Minus(引く) * : Times(掛ける) / : Divided By(割る) ** : To The Power Of(累乗) = : Equals(等しい) != : Does Not Equal(等しくない) 扱う数値は1から10までです。もし入力された演算子が上記のリストに存在しない場合は、「Thats not an ope