-
【JavaScript】各桁の合計で数値が「Oddish」か「Evenish」かを判定する方法
すべての桁の数字を足し合わせた合計が奇数になる数値を「Oddish(オディッシュ)」、合計が偶数になる数値を「Evenish(イーブンニッシュ)」と呼びます。本記事では、与えられた数値が Oddish か Evenish かを判定する関数を JavaScript で実装します。判定結果として、Oddish の場合は true を、Evenish の場合は false を返します。実装の考え方判定の手順は以下のとおりです。数値を 10 で割った余り(num % 10)で一の位の数字を取り出す数値を 10 で割って小数点以下を切り捨て(Math.floor(num / 10))、次の桁へ進むこれを
-
JavaScriptで先頭と末尾の桁からなる数との差を求める方法
問題の概要本記事では、数値を受け取り、その数の先頭(最初)の桁と末尾(最後)の桁だけを使って新しい数を組み立て、元の数とその新しい数との差を返すJavaScript関数の実装方法を解説します。具体例例えば、入力が 34567 の場合を見てみましょう。先頭の桁は「3」、末尾の桁は「7」なので、これらから構成される「角の数」は次のようになります。37したがって、元の数から角の数を引いた結果として、期待される出力は次の通りです。34530コード例以下が実際の実装コードです。const num = 34567; const cornerDifference = num => { &n
-
JavaScriptで文字列を逆順(降順)にソートする方法
本記事では、小文字の文字列を受け取り、逆順(降順)に並べ替えるJavaScript関数の作成方法を解説します。つまり、「b」は「a」より前に、「c」は「b」より前に来るようにソートします。期待する動作例えば、入力文字列が以下の場合:const str = hello;出力は次のようになります。const output = ollhe;実装コード以下がその実装例です。 { const strArr = str.split(); return strArr .sort(sorter) .join(); }; console.log(reverseSort(strin
-
合計が指定の数値になる3つの連続する自然数を確認する方法 - JavaScript
今回は、数値 n を引数として受け取り、合計がちょうど n に等しくなる3つの連続する自然数(小数や浮動小数点数ではなく整数)が存在するかどうかを判定する JavaScript 関数を作成します。 該当する数値の組み合わせが存在する場合はその3つの数値を配列で返し、存在しない場合は false を返す仕様とします。 考え方:数学的なアプローチ 3つの連続する自然数を x、x + 1、x + 2 と表すと、その合計は次のように書けます。 x + (x + 1) + (x + 2) = 3x + 3 この式から、以下の条件が導き出せます。 合計は必ず3の倍数になるため、n % 3 !== 0 の
-
ソート済み配列から一度だけ出現する最初の要素を見つける方法 - JavaScript
問題の概要次のような、昇順にソートされた数値の配列があるとします。const arr = [2, 2, 3, 3, 3, 5, 5, 6, 7, 8, 9];この配列を受け取り、「一度だけ出現する最初の数値」を返すJavaScript関数を作成します。該当する数値が配列内に存在しない場合は、false を返します。上記の配列の場合、期待される出力は 6 です。解決策のコード例以下がその実装コードです。const arr = [2, 2, 3, 3, 3, 5, 5, 6, 7, 8, 9]; const firstNonDuplicate = arr => { let appea
-
JavaScriptで数値がフィボナッチ数かどうか判定する方法
本記事では、引数として受け取った数値がフィボナッチ数列に含まれているかどうかを判定し、その結果を真偽値(true / false)で返すJavaScript関数の作成方法を解説します。 フィボナッチ数列とは フィボナッチ数列は「直前の2項の和が次の項になる」という規則に従う数列で、一般的に0と1から始まります。具体的には以下のような並びになります。 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, … 判定の考え方 判定方法はシンプルで、フィボナッチ数列の値を先頭から順番に生成しながら、対象の数値と一致するかを確認していきます。処理の流れは次のとおりです。 数
-
JavaScriptで配列内の重複しない要素の合計を求める方法
本記事では、数値の配列を受け取り、そこに含まれる一意な(重複しない)値ごとに1回だけ加算した合計を求めるJavaScript関数の実装方法を解説します。同じ値が何度出現しても、合計には1回しか含まれない点がポイントです。 問題の例 たとえば、次のような数値の配列があるとします。 const arr = [1, 5, 2, 1, 2, 3, 4, 5, 7, 8, 7, 1]; この配列に含まれる異なる値は 1, 5, 2, 3, 4, 7, 8 の7種類です。したがって、この関数が返すべき出力は次のとおりです。 1 + 5 + 2 + 3 + 4 + 7 + 8 = 30 実装例:lastIn
-
左右の部分配列の合計の積を求めるJavaScript関数
本記事では、長さN(Nは偶数)の数値配列を受け取り、その配列を左右2つの部分配列に分割して処理するJavaScript関数の実装方法を解説します。 問題の概要 要件は以下のとおりです。 長さNの数値配列を受け取る(Nは偶数であること) 配列を前半N/2個の要素からなる「左側」の部分配列と、後半N/2個の要素からなる「右側」の部分配列に分割する それぞれの部分配列の要素の合計を求める 両方の合計値を乗算した結果を返す 例えば、入力配列が次の場合を考えてみましょう。 const arr = [1, 2, 3, 4] この場合、左側は [1, 2]、右側は [3, 4] となるため、出力は以下の
-
【JavaScript】合計が0に最も近い配列の隣接要素ペアを見つける方法
本記事では、数値の配列を受け取り、隣接する2つの要素の合計が目標値に最も近くなるペアをサブ配列として返すJavaScript関数を作成します。目標値に0を指定すれば、「合計が0に最も近い隣接要素」を求めることができます。 問題の要件 この関数には、次の条件が課せられています。 数値の配列を目標値(合計のターゲット)とともに受け取る 隣接する2つの要素のうち、合計が目標値に最も近いペアを返す 配列の長さが2以下の場合は、元の配列全体をそのまま返す たとえば、次のような入力配列が与えられたとします。 const arr = [4, 4, 12, 3, 3, 1, 5, -4, 2, 2]; こ
-
【JavaScript】3つの数値の真ん中(中間値)を最小限の比較で求める方法
この記事では、ソートされていない3つの数値を受け取り、比較回数を最小限に抑えてその中間の値(真ん中の数)を返すJavaScript関数の実装方法を解説します。 問題の概要 例えば、次のような3つの数値が与えられたとします。 34, 45, 12 この場合、関数は以下の値を返す必要があります。 34 サンプルコード 以下が実際の実装コードです。 const num1 = 34; const num2 = 45; const num3 = 12; const middleOfThree = (a, b, c) => { // x は a が b より大き
-
JavaScriptで2つの配列の積の最大合計を効率的に求める方法
本記事では、正の整数からなる2つの配列 arr1 と arr2 を扱います。両方の配列には同数の要素が含まれており、これらの配列を使って「要素同士の積の合計」が最大になる組み合わせを見つける関数を作成します。 問題の概要 arr1 の各要素は、arr2 のいずれか1つの要素と必ず1回だけ掛け合わせる必要があります。逆も同様で、両方の配列のすべての要素がちょうど1回ずつ使われ、その結果生じる積の合計が最大となるようにしなければなりません。 例えば、次のような配列が与えられたとしましょう。 arr1 = [5,1,3,4,2] および arr2 = [8,10,9,7,6] この場合、積の合計とし
-
【JavaScript】数値の約数の個数を数える関数の実装方法
本記事では、数値を引数として受け取り、その数値を割り切ることができる整数(約数)の個数を返すJavaScript関数の実装方法を解説します。例えば、入力が12の場合、12の約数は以下のようになります。1, 2, 3, 4, 6, 12この場合、約数は全部で6個存在するため、関数の出力は 6 となります。約数カウント関数の実装例以下が実際のコードです。const num = 12; const countFactors = num => { let count = 0; let flag = 2
-
JavaScriptで等差数列(AP)のn番目の項を求めるコード
本記事では、3つの数値を引数として受け取り、等差数列(AP:Arithmetic Progression)のn番目の項を計算して返すJavaScript関数の実装方法を解説します。 問題の概要 関数に渡される最初の2つの数値は、等差数列の最初の連続する2項とします。そして、3つ目の数値 n は、1から始まるインデックスに基づく項番号であり、その項の値を求める必要があります。 例えば、入力が 2, 5, 7 の場合を考えてみましょう。 初項:2 第2項:5(公差は 5 − 2 = 3) 求めたい項:第7項 このとき、数列は次のようになります。 2, 5, 8, 11, 14, 17, 20
-
【JavaScript】文字列を英字・数字・特殊文字の3グループに分割する方法
本記事では、英字・数字・特殊文字が混在した文字列を受け取り、それぞれを別々の文字列へ振り分けるJavaScriptのプログラムを紹介します。問題の概要英字、数字、特殊文字で構成される文字列Sが与えられたとき、次の条件を満たす3つの文字列S1、S2、S3に分割するプログラムを作成します。S1:Sに含まれるすべての英字S2:Sに含まれるすべての数字S3:Sに含まれるすべての特殊文字なお、各文字列内の文字は、元の入力文字列に出現した順序を維持する必要があります。サンプルコード以下がその実装例です。const str = Th!s String C0nt@1ns d1fferent ch@ract5r
-
JavaScriptで配列の先頭からk番目の要素と末尾からk番目の要素を入れ替える方法
課題数値の配列と整数 k を引数として受け取る JavaScript 関数を作成する必要があります。ここで k は、配列の長さ以下であることが前提となります。この関数は、配列の先頭から k 番目の要素と、末尾から k 番目の要素を入れ替えて返すものとします。コード例以下がその実装例です −const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];const swapKth = (arr, k) => { const { length: l } = arr; let te
-
【JavaScript】数値の各桁の合計が回文数かどうかを判定する方法
本記事では、数値を受け取り、その各桁の合計を計算したうえで、その合計が回文数(パリンドローム)であるかどうかを判定するJavaScript関数の実装方法を解説します。合計が回文数であれば関数は true を、そうでなければ false を返します。たとえば、入力が 697 の場合を考えてみましょう。各桁の合計は 6 + 9 + 7 = 22 となり、22 は左右どちらから読んでも同じ数値なので回文数です。したがって、この関数は 697 に対して true を返す必要があります。コード例以下が実際のコードです。const num = 697;const sumDigit = (num, sum
-
JavaScriptで最初のn個の奇数の平方和を計算する方法
問題の概要数値 n を引数として受け取り、最初の n 個の奇数(自然数)の平方の合計を求める JavaScript 関数を作成する必要があります。例入力が 3 の場合、計算内容は次のようになります。1² + 3² + 5² = 35したがって、期待される出力は次のとおりです。35実装コード以下がそのコードです。const num = 3; const squaredSum = num => { let sum = 0; for(let i = 1; i <= num; i++){ sum += Math.pow((2 * i) - 1, 2);
-
JavaScriptで配列がソート済みかどうか判定する方法(昇順・降順を問わず対応)
はじめにJavaScriptでは、数値や文字列などのリテラル値を含む配列を受け取り、その配列がソート済みかどうかを判定する関数が必要になる場面があります。ここでのポイントは、昇順・降順のどちらの並び順でも「ソート済み」とみなすという点です。つまり、作成する関数は次のような仕様になります。配列が昇順または降順のいずれかに整列していれば true を返すそれ以外(未ソートの状態)であれば false を返す実装コード以下は、昇順・降順のどちらにも対応したソート判定関数の実装例です。const arr = [1, 3, 56, 87, 99, 102, 144, 255, 456, 788, 999
-
条件に応じて文字列を大文字・小文字に変換する方法 - JavaScript
本記事では、文字列を引数として受け取り、特定の条件に基づいてその形式を変換するJavaScript関数の作成方法を解説します。関数が満たすべき条件は以下のとおりです。文字列の最初の文字が大文字である場合 → 文字列全体を大文字に変換するそれ以外の場合 → 文字列全体を小文字に変換する実装例以下のコードは、上記の条件を実現する関数の一例です。const str1 = "This is a normal string"; const str2 = "thisIsACamelCasedString"; const changeStringCase = str
-
文字列内に2回繰り返される単語の数を数える方法 - JavaScript
問題の概要JavaScriptの関数を作成し、文字列の中に2回繰り返して出現する単語がいくつあるかを数える必要があります。たとえば、入力文字列が次のようになっているとします。const str = car bus jeep car jeep bus motorbike truck;この場合、2回繰り返されている単語は「car」「bus」「jeep」の3つなので、出力は次のようになります。3解決のアプローチこの問題は、次の手順で解くことができます。文字列を split( ) でスペース区切りにして、単語の配列に変換する各単語について、その単語が最後に出現する位置(lastIndexOf)が現在の