JavaScript

 Computer >> コンピューター >  >> プログラミング >> JavaScript
  1. 【JavaScript】文字列を繰り返して別の文字列を形成できる最小回数を求める方法

    問題 2つの文字列 str1 と str2 を第1引数・第2引数として受け取るJavaScript関数を作成する必要があります。 この関数は、str1 を繰り返し連結していったときに str2 がその部分文字列となる、最小の繰り返し回数を返します。何度繰り返しても str2 が部分文字列にならない場合は -1 を返してください。 たとえば、関数に次の入力を与えたとします。 入力: const str1 = wxyz; const str2 = yzwxyzwx; 出力: const output = 3; 出力の説明: str1(wxyz)を3回繰り返した文字列 wxyzwxyzwxyz の

  2. JavaScriptで時刻の数字を再利用して最も近い次の時刻を求める方法

    問題の概要本記事では、「HH:MM」形式で時刻を表す文字列を受け取り、その文字列に含まれる数字を再利用して最も近い次の時刻を作成するJavaScript関数を紹介します。数字の再利用回数に制限はありません。例として、関数への入力と出力は以下のようになります。入力const time = 19:34;出力const output = 19:39;出力の解説数字「1, 9, 3, 4」から選んで作れる次に近い時刻は「19:39」で、これは5分後の時刻です。「19:33」を採用しない理由は、この時刻が現在から23時間59分後になってしまうためです。解法のコード例以下が実際の実装コードです。const

  3. JavaScriptで最大1文字の削除により回文を形成できるか判定する方法

    問題概要今回求められているのは、文字列 str を第一引数(唯一の引数)として受け取る JavaScript 関数を作成することです。この関数では、文字列から 最大1文字 を削除することが許されており、その操作によって文字列を回文にできるかどうかを判定する必要があります。回文とは、前から読んでも後ろから読んでも同じになる文字列のことです。なお、そもそも1文字も削除しなくてよいケースも含まれます。入出力の例たとえば、関数への入力が以下の場合を考えてみましょう。入力const str = 'dr.awkward';出力const output = true;出力の解説文字列から「.

  4. JavaScriptで四則演算を使って目標値を作れるか判定する方法

    問題 ちょうど4つの数値からなる配列 arr を第1引数に、目標値 target を第2引数として受け取る JavaScript 関数を書く必要があります。 この関数の役割は、配列内の数値に対して *(掛け算)、/(割り算)、+(足し算)、-(引き算)および括弧 ( ) を自由に組み合わせて、target と等しい値を作り出せるかどうかを判定することです。 たとえば、関数への入力が次の場合を考えてみましょう。 入力 const arr = [5, 3, 2, 1]; const target = 4; 出力 const output = true; 出力の説明 次のように計算すれば 4 を作

  5. JavaScriptの二分探索(バイナリサーチ)でソート済み配列を検索する方法

    問題昇順にソートされた数値の配列 arr を第1引数に、検索したい数値 target を第2引数として受け取るJavaScript関数を作成します。配列がすでにソートされているため、二分探索(バイナリサーチ)アルゴリズムを使って target を効率的に検索します。target が配列内に存在する場合はそのインデックスを返し、存在しない場合は -1 を返す必要があります。入出力の例たとえば、関数への入力が次の場合を考えます。入力const arr = [3, 5, 7, 9, 11, 13, 15, 16, 18, 21, 24, 25, 28];const target = 13;出力con

  6. 【JavaScript】str2内に出現するstr1の文字数をカウントして返す方法

    問題2つの文字列 str1 と str2 を第1引数・第2引数として受け取るJavaScript関数を作成する必要があります。この関数の役割は、str1 に含まれる文字のうち、str2 にも出現する文字の個数を数えて返すことです。同じ文字が複数回出現する場合は、それぞれを別々にカウントします。たとえば、関数への入力が次のような場合を考えてみましょう。入力const str1 = Kk; const str2 = klKKkKsl;出力const output = 5;この場合、str1 の文字「K」と「k」は str2 内に合計5回出現するため、結果は 5 となります。 コード例以下が実際のコ

  7. JavaScriptで行列の対角線がすべて同じ要素かどうかを判定する方法

    問題概要 リテラルを要素とする2次元配列 arr を第一引数(唯一の引数)として受け取るJavaScript関数を作成します。 この関数の役割は、行列の左上から右下へ向かうすべての対角線が同じ要素で構成されているかどうかを判定することです。これは、いわゆる「トゥーマトリックス(Toeplitz行列)」と呼ばれる行列の判定問題に相当します。 条件を満たしていれば true を、そうでなければ false を返します。 例として、次の入力を関数に渡した場合を考えてみましょう。 入力 const arr = [ [6, 7, 8, 9], [2, 6, 7, 8], [1,

  8. JavaScriptで文字列をできるだけ多くの部分に分割するアルゴリズム

    文字列処理のアルゴリズム問題としてよく知られている「Partition Labels」をJavaScriptで解いてみましょう。この記事では、各文字が1つの部分にしか現れないように、文字列をできるだけ多くの部分へ分割する方法を解説します。 問題の定義 まず、文字列 str を引数として受け取るJavaScript関数を作成します。この関数の目的は、以下の条件を満たすように文字列を可能な限り多くの部分に分割することです。 各文字(英字)は、最大でも1つの部分にしか出現しない 戻り値は、各部分の長さを表す整数の配列 例を見てみましょう。 入力: const str = ababcbacade

  9. JavaScriptで大文字と小文字が混在する文字列を小文字に変換する方法|自作関数convertToLower()の実装

    はじめにJavaScriptには文字列を小文字に変換する標準メソッドtoLowerCase()が用意されていますが、本記事では、ASCIIコードを直接操作することで、大文字と小文字が混在する文字列をすべて小文字に変換する独自の関数convertToLower()を実装する方法を解説します。問題文字列に対して呼び出すと、その文字列内の大文字(A〜Z)をすべて小文字(a〜z)へ変換し、新しい文字列として返すJavaScript関数 convertToLower() を作成します。たとえば、関数への入力と期待される出力は以下のとおりです。入力:const str = ABcD123;出力:const

  10. JavaScriptで「次に大きい要素までの距離」を求めるアルゴリズム

    問題概要 数値の配列 arr を唯一の引数として受け取るJavaScript関数を作成します。 この関数の役割は、入力配列をもとに新しい配列を構築することです。新しい配列の各要素には、「現在の要素よりも大きい要素が右側に現れるまでの距離」(インデックスの差)を格納します。もし現在の要素より大きい要素が右側に存在しない場合は、対応する位置に 0 を入れます。最後に、この結果配列を返します。 入力例 const arr = [12, 13, 14, 11, 16, 10, 12, 17, 19, 18]; 出力例 const output = [1, 1, 2, 1, 3, 1, 1, 1,

  11. JavaScriptで単調増加する桁を持つ、指定した数以下の最大の数を求める方法

    単調増加する桁(Monotonically Increasing Digits)とは 整数が「単調増加する桁」を持つとは、隣り合う任意の2つの桁 x と y の間に、常に x <= y が成り立つことを指します。たとえば 1234 や 2299 は左から右へ向かって桁が増加(または同じ)ため条件を満たしますが、332 のように「3 → 3 → 2」と減少が含まれる数は単調増加とはみなされません。 問題 今回求められているのは、数値 num を第一引数(かつ唯一の引数)として受け取るJavaScript関数を記述することです。 この関数は、num 以下の数の中から、単調増加する桁を持つ

  12. 【JavaScript】スタックを使って小惑星の衝突後の最終状態を求めるアルゴリズム

    問題の概要1次元空間上に存在する複数の小惑星(アステロイド)の位置を表す配列 arr を受け取り、すべての衝突が完了した後の最終的な状態を返すJavaScript関数を作成します。各要素において、絶対値は小惑星のサイズを、符号は移動方向を表します(正の値なら右方向、負の値なら左方向へ移動)。すべての小惑星は同じ速度で動くため、追いついて衝突するのは進行方向が逆向きのペアだけです。衝突のルールは以下のとおりです。サイズが異なる場合:小さい方の小惑星のみが爆発して消滅します。サイズが同じ場合:両方の小惑星が爆発して消滅します。同じ方向に移動している小惑星同士は、決して衝突しません。入出力の例入力c

  13. 【JavaScript】配列の中で左右の合計が等しくなる中央インデックス(ピボットインデックス)を見つける方法

    問題数値の配列 arr が与えられたとき、「あるインデックスより左側にあるすべての要素の合計」と「そのインデックスより右側にあるすべての要素の合計」が等しくなる位置(中央インデックス/ピボットインデックス)を求める JavaScript 関数を作成します。該当するインデックスが複数存在する場合は、最初に見つかったものを返し、存在しない場合は -1 を返すのが一般的です。たとえば、次のような入力を考えます。入力const arr = [1, 7, 3, 6, 5, 6];出力const output = 3;出力の解説インデックス 3 の要素は nums[3] = 6 です。この要素の左側にある

  14. JavaScriptで2つの配列に共通する部分配列の最大長を求める方法

    問題の概要JavaScriptで、リテラル値からなる2つの配列 arr1 と arr2 を引数として受け取る関数を作成します。この関数は、両方の配列に共通して現れる部分配列(サブアレイ)の中で最も長いものの長さを返す必要があります。ここでの「部分配列」とは、元の配列から要素を連続した形で取り出したものを指します。順序が連続していなければならない点に注意してください。入力例const arr1 = [1, 2, 3, 2, 1]; const arr2 = [3, 2, 1, 4, 7];出力例const output = 3;解説この場合、最大長となる共通の部分配列は [3, 2, 1] です

  15. 【JavaScript】中央にピークを持つ配列のピークインデックスを二分探索で見つける方法

    中央にピークを持つ配列とはある配列 arr が「中央にピークを持つ配列(centrally peaked array)」であるとは、以下の条件を満たすことを指します。arr.length >= 30 < i < arr.length - 1 を満たす添字 i が存在し、次の条件が成り立つarr[0] < arr[1] < ... arr[i-1] < arr[i](インデックス i まで単調に増加する)arr[i] > arr[i+1] > ... > arr[arr.length - 1](インデックス i 以降は単調に減少する)つまり、

  16. 【JavaScript】トランプのカードを連続する数字のグループに再配置できるか判定する方法

    本記事では、JavaScriptを用いてトランプのカードを「指定サイズの連続した数字のグループ」に再配置できるかどうかを判定するアルゴリズムを解説します。配列のソートとハッシュマップ(オブジェクト)を組み合わせたシンプルかつ効率的なアプローチを学びましょう。 問題の概要 次のようなJavaScript関数を実装することが求められます。 第1引数:数値の配列 arr 第2引数:グループのサイズを表す数値 num 配列内の各数値は [1, 13] の範囲(両端を含む)に収まっており、それぞれトランプのカードに対応しています。 この関数の目的は、すべてのカードを「サイズが num であり、かつ

  17. JavaScriptで配列内の最長の「山」部分配列の長さを求める方法

    山(マウンテン)部分配列とは配列 arr の(連続した)部分配列 sub が「山」と呼ばれるのは、以下の性質を満たす場合です。sub.length >= 3 であることある 0 < i < sub.length - 1 が存在し、sub[0] < sub[1] < ... < sub[i] > sub[i+1] > ... > sub[sub.length - 1] となること。つまり、一度増加していき頂点に達した後、減少に転じる形状を持つこと問題数値の配列 arr を第一引数(唯一の引数)として受け取るJavaScript関数を作成する必

  18. JavaScriptで2次元行列を水平方向に反転し、さらにビット反転する方法

    問題0と1のみで構成される2次元のバイナリ配列 arr を唯一の引数として受け取るJavaScript関数を作成する必要があります。この関数は、まず行列を水平方向に反転(フリップ)し、その後に行列表現上の各値を反転(インバート)して、最終的な結果の行列を返すものとします。用語の定義水平方向への反転とは、行列の各行を逆順に並べ替えることを意味します。たとえば、[1, 1, 0] を水平方向に反転すると [0, 1, 1] になります。反転(インバート)とは、行列内のすべての0を1に、すべての1を0に置き換えることを意味します。たとえば、[0, 1, 1] を反転すると [1, 0, 0] になり

  19. JavaScriptで循環キュー(リングバッファ)を実装する方法

    循環キュー(Circular Queue)とは 循環キューは、FIFO(First In First Out:先入れ先出し)の原則に基づいて操作が行われる線形データ構造の一つです。末尾の位置が先頭の位置につながり、全体が輪のように見えることから「リングバッファ(Ring Buffer)」とも呼ばれます。 循環キューの大きなメリットは、キューの先頭側に生じた空きスペースを再利用できる点にあります。通常のキューでは、いったん満杯になると先頭側に空きがあっても新しい要素を挿入できません。しかし循環キューであれば、その空きスペースを活用して引き続き値を格納することが可能です。 実装要件 ここでは、J

  20. JavaScriptで文字列内の指定文字への最短距離を求める方法

    問題概要英語の小文字アルファベットのみで構成された文字列 str を第1引数に、その文字列に必ず存在する1文字 char を第2引数にとる JavaScript 関数を作成する必要があります。この関数は、文字列 str 内の各文字について、char で指定された文字の中で最も近いものまでの距離を計算し、その結果を配列として返します。たとえば、次のような入力が与えられた場合を考えてみましょう。入力:const str = somestring; const char = s;出力:const output = [0, 1, 2, 1, 0, 1, 2, 3, 4, 5];出力の配列を見ると、イン

Total 5937 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:7/297  20-コンピューター/Page Goto:1 2 3 4 5 6 7 8 9 10 11 12 13