-
JavaScriptで配列内の連続する非負数のグループ数を数える方法
問題の概要次のような数値の配列があるとします。const arr = [-1,-2,-1,0,-1,-2,-1,-2,-1,0,1,0];この配列から、負数ではない数値(0と正の数)が連続して並んでいる「グループ」の数を数えるJavaScript関数を作成する必要があります。例えば上記の配列では、インデックス3から3まで(要素は1つだけですが、これも1つのクラスタとして扱います)が最初のグループとなり、インデックス9から配列の末尾までが2番目のグループとなります。したがって、この配列の場合、関数は 2 を返す必要があります。それでは、この関数のコードを書いてみましょう。実装例コードは以下のよう
-
JavaScriptで文字列内のn回目に出現した文字を置き換える関数の作成方法
JavaScriptでは、第一引数に文字列、第二引数に数値 n、第三引数に文字 c を受け取る関数を実装することが求められることがあります。この関数の役割は、文字列中に登場するそれぞれの種類の文字について「n 回目の出現」を見つけ、それを第三引数で指定した文字に置き換えた新しい文字列を返すことです。実装例以下がそのコードです。 { let { res, map } = acc; if(!map.has(val)){ map.set(val, 1); if(num === 0){ re
-
JavaScriptで文字列内の2番目に短い単語の長さを取得する関数の実装方法
はじめに 本記事では、JavaScriptで文字列の中から2番目に短い単語の長さを返す関数を実装する方法を解説します。引数として文章(文字列)を1つ受け取り、その中の単語を調べて、2番目に短い単語の文字数を出力するのが目的です。 例えば、次のような文字列が与えられた場合を考えてみましょう。 const str = This is a sample string; この文字列の場合、最も短い単語は「a」(1文字)、2番目に短い単語は「is」(2文字)であるため、出力は 2 となります。 コード例 それでは、この関数の実装を見ていきましょう。 {
-
JavaScriptで2つの配列から連続した数列を作成できるか判定する方法
本記事では、2つの数値配列を受け取り、それらを結合して並べ替えたときに連続した整数列(連番)を形成できるかどうかを判定するJavaScript関数の作成方法を解説します。条件を満たす場合はtrue、そうでない場合はfalseを返す関数を実装していきます。 問題の概要 例えば、次のような2つの配列が与えられたとします。 const arr1 = [4, 6, 2, 9, 3]; const arr2 = [1, 5, 8, 7]; この2つの配列を結合して昇順に並べ替えると [1, 2, 3, 4, 5, 6, 7, 8, 9] となり、公差1の連続した整数列になるため、期待される出力は tru
-
JavaScriptで配列内の各データ型の頻度をMapとして返す方法
本記事では、number・string・objectなど、さまざまなデータ型の要素が混在する配列を受け取り、それぞれのデータ型が出現した回数(頻度)をMapオブジェクトとして返すJavaScript関数の作成方法を解説します。まずは、処理対象となるサンプル配列を見てみましょう。const arr = [23, df, undefined, null, 12, { name: Rajesh }, [2, 4, 7], dfd, null, Symbol(*), 8];この配列には数値、文字列、undefined、null、オブジェクト、配列、Symbolと多様な型が含まれています。サンプ
-
JavaScriptで配列の両端から要素をペアリングする方法
JavaScriptでは、数値や文字列を含む配列を受け取り、「先頭からn番目の要素」と「末尾からn番目の要素」をペアにしたサブ配列で構成される、新しい配列の配列を返す関数を作成できます。例えば、次のような配列があったとします。const arr = [1, 2, 3, 4, 5, 6];この場合、期待される出力は以下の通りです。const output = [[1, 6], [2, 5], [3, 4]];実装コードこの処理を実現するコードは以下のようになります。const arr = [1, 2, 3, 4, 5, 6]; const edgePairs = arr => { &nbs
-
【JavaScript】指定した長さのランダムな英字文字列を生成する方法
JavaScriptで、数値 n を引数として受け取り、英小文字(a〜z)だけを使った長さ n のランダムな文字列を返す関数を作成する方法を紹介します。 実装コード Math.random() と String.fromCharCode() を組み合わせることで、シンプルに実装できます。 const num = 8; const randomNameGenerator = num => { let res = ; for (let i = 0; i < num; i++) { const random = Math.floor(Math.random() * 26
-
JavaScriptで指定した数値より大きい最初の素数を見つける方法
本記事では、JavaScriptで数値を引数として受け取り、その数より大きい最初の素数を返す関数の作成方法を解説します。 例えば、入力が24の場合、24より大きい最初の素数は29であるため、出力は29になります。 素数とは 素数とは、1とその数自身以外に正の約数を持たない、1より大きい自然数のことです。ある数nが素数かどうかを判定するには、2からn−1までの整数で順に割り算を行い、1つも割り切れる数がなければ素数と判断できます。 コード例 const num = 24; const isPrime = n => { if (n === 1)
-
JavaScriptで文字列をバイナリ文字列(0と1)に変換する方法
本記事では、小文字の文字列を受け取り、a〜m の範囲の文字をすべて 0 に、n〜z の範囲の文字をすべて 1 に置き換えた新しい文字列を返すJavaScript関数を作成します。 実装例 以下がそのコードです。 m){ res += 1; }else{ res += 0; }; }; return res; }; console.log(stringToBinary(str)); 出力結果 コンソールには以下のように出力されます。 00001 111000 011 010 111 コードの解説 こ
-
JavaScriptで配列内の唯一異なる要素(仲間はずれ)を見つける方法
今回は、すべて同じ値で構成されており、ただ一つだけ異なる要素が混ざっている配列を受け取り、その「仲間はずれ」の値を返すJavaScript関数を作成していきます。 例えば [2, 4, 4, 4, 4] のような配列が渡された場合、関数は 2 を返す必要があります。それでは、実際のコードを見ていきましょう。 実装例 配列の長さは少なくとも3以上であることを前提とし、隣接する要素同士を比較しながらループ処理を行う方法です。 { for (let i = 1; i < arr.length - 1; i++) { // 前の要素と異なり、次の要素とも異なる場合は現在の要素が仲
-
JavaScriptで減算演算子を使わずに引き算を実現する方法
はじめに JavaScriptには、2つの数値を受け取ってその差(引き算の結果)を返す関数を実装するという課題があります。ただし、ここでの条件は減算演算子(-)を一切使用しないことです。 この問題は、コンピュータが数値を2進数で扱っていることを利用すれば解決できます。具体的には、XOR・AND・NOT・左シフトといったビット演算を組み合わせ、再帰的に処理を繰り返すことで、減算とまったく同じ結果を得ることができます。 解法のポイント アルゴリズムの中核をなすのは、次の2つの式です。 num1 ^ num2(XOR) … 各桁の「借りを考慮しない差」を求めます。 (~num1 & nu
-
【JavaScript】配列内の重複文字を含まない最初の文字列を見つける方法
次のような、重複した文字を含む可能性のある文字列の配列があるとします。const arr = [54gdgdfe3, 434ffd, 43frdf, 43fdhnh, wgcxhjny, fsdf34];ここでの課題は、このような配列を受け取り、「重複した文字を1つも含まない」最初の要素を返すJavaScript関数を作成することです。もし該当する文字列が配列内に存在しない場合は、falseを返す必要があります。それでは、この関数を実装していきましょう。実装のポイントまず、文字列内のすべての文字が一意(ユニーク)であるかどうかを判定するヘルパー関数 isUnique を用意します。split(
-
【JavaScript】2つの数値の対応する桁の絶対差(桁距離)を計算する方法
本記事では、2つの数値を受け取り、それらの「桁距離」を返すJavaScript関数の実装方法を解説します。 桁距離とは? 桁距離(digit distance)とは、2つの数値の対応する各桁同士の差の絶対値を合計したものです。 具体例 たとえば、345 と 678 という2つの数値を考えます。この場合、桁距離は次のように計算されます。 |3-6| + |4-7| + |5-8| = 3 + 3 + 3 = 9 つまり、この2つの数値の桁距離は 9 となります。 コードの実装 それでは、実際にこの処理を行う関数を実装してみましょう。基本的なアプローチは以下の通りです。 両方の数値を文字列に変換
-
JavaScriptで分数の合計を最も簡単な形(約分した形)で求める関数の実装方法
JavaScriptでは、複数の分数を小数に変換せずに、そのまま分数の形で足し合わせたい場面があります。本記事では、「配列の中に配列が入ったデータ」から各分数を取り出し、その合計を約分された最もシンプルな分数として返す関数の実装方法を解説します。扱うデータの形式まず、次のような「配列の配列」を考えてみましょう。const arr = [[12, 56], [3, 45], [23, 2], [2, 6], [2, 8]];この配列は任意の数の要素を持てますが、重要なルールが1つあります。それは、各サブ配列には必ず2つの数値が含まれるということです。サブ配列と分数の対応関係各サブ配列内の2つの数
-
【JavaScript】配列の全要素を割り切れるn桁の最小の数を求める方法
本記事では、第一引数に整数 n、第二引数に数値の配列を受け取り、「配列のすべての要素で割り切れる n 桁の最小の数」を返す JavaScript 関数の実装方法を解説します。 もし該当する n 桁の数が存在しない場合は、条件を満たす最小の数をそのまま返します。 問題の例 たとえば、次のような配列が与えられたとします。 const arr = [12, 4, 5, 10, 9]; この場合、n = 2 のときも n = 3 のときも、期待される出力は次のとおりです。 180 これは、12・4・5・10・9 のすべてを割り切れる最小の数(最小公倍数)が 180 であり、180 は 2 桁にも 3
-
JavaScriptで配列が単調増加・単調減少しているかを判定する方法
数値の配列を受け取り、その配列が狭義単調増加(厳密に増加し続ける)または狭義単調減少(厳密に減少し続ける)のいずれかであれば true を、そうでなければ false を返すJavaScript関数を作成する方法を解説します。数学において、単調増加関数とは、グラフ上の値が常に増加し続ける関数のことを指します。同様に、単調減少関数とは、グラフ上の値が常に減少し続ける関数のことです。この判定を実現するポイントは、隣接する3つの要素を順に取り出し、その「傾き」の向きが一貫しているか(すべて正またはすべて負)を確認することです。それでは、実際のコードを見ていきましょう。サンプルコードconst arr
-
JavaScriptで文が「スムーズ」かどうかを判定する関数の実装方法
本記事では、与えられた文が「スムーズ(smooth)」であるかどうかを判定するJavaScript関数の実装方法を解説します。 スムーズな文とは? 「スムーズな文」とは、文中の各単語の最初の文字が、直前の単語の最後の文字と一致している文のことです。例えば「this stringt tries sto obe esmooth」のような文は、単語同士が文字でつながっているためスムーズとみなされます。一方、「this string is not smooth」のように単語のつながりが途切れている文はスムーズではありません。 それでは、この判定を行う関数のコードを見ていきましょう。 実装コード con
-
【JavaScript】配列の要素を並べ替えて連続した数列が作れるか判定する方法
本記事では、数値の配列を受け取り、その要素を並べ替えることで連続した数列(1ずつ増加する等差数列)を作れるかどうかを判定するJavaScript関数の実装方法を解説します。 問題の概要 例えば、次のような配列が与えられたとします。 const arr = [3, 1, 4, 2, 5]; この配列は「1, 2, 3, 4, 5」という連続した数列に並べ替えられるため、関数の出力は true になります。 実装例 実際のコードは以下の通りです。 const arr = [3, 1, 4, 2, 5]; const canBeConsecutive = (arr = []) => {
-
JavaScriptで整数の加法持続性(桁合計の繰り返し回数)を求める方法
本記事では、正の整数を受け取り、その加法持続性(additive persistence)を返すJavaScript関数の実装方法を解説します。加法持続性とは?整数 n の加法持続性とは、その数値を各桁の数字の合計で置き換える操作を、結果が1桁の整数になるまで繰り返す必要がある回数のことです。例として、次の数値を見てみましょう。1679583この数値に対して桁合計を繰り返し適用すると、以下のようになります。1 + 6 + 7 + 9 + 5 + 8 + 3 = 39 // 1回目 3 + 9 = 12 // 2回目 1 + 2 = 3 // 3回目3回の操作で1桁の数値「3」に到達できたため、
-
JavaScriptで16進数コード(HEX)が有効かどうかを判定する方法
有効な16進数コードとは?文字列が「有効な16進数コード(HEXコード)」であるためには、その文字列が 0〜9 の数字 と a〜f のアルファベット 以外の文字を含んでいない必要があります。例3423ad は有効な16進数コード4234es は無効な16進数コード今回は、文字列を引数として受け取り、それが有効な16進数コードかどうかを判定するJavaScript関数を作成します。実装例:ループで1文字ずつ検証する方法まずは、許容される文字をまとめた文字列(legend)を用意し、対象の文字列を先頭から1文字ずつチェックしていくシンプルなアプローチです。許可されていない文字が1つでも見つかった時