JavaScriptで2次元行列の対角線要素の合計差を計算する方法
JavaScriptでは、2次元配列を使って正方行列を表現できます。例えば、以下のような3×3の行列があるとします。
const arr = [ [1, 3, 5], [3, 5, 7], [2, 4, 2] ];
求められる処理
このような2次元配列を引数として受け取るJavaScript関数を作成する必要があります。この関数は、行列の2つの対角線(左上から右下への対角線と、右上から左下への対角線)上に存在する要素の合計値の差(絶対値)を返すものです。
計算の流れ
上記の行列を例にとって、具体的な計算手順を見てみましょう。
- 主対角線(左上→右下):1 + 5 + 2 = 8
- 副対角線(右上→左下):5 + 5 + 2 = 12
したがって、計算結果は次のようになります。
| (1 + 5 + 2) − (5 + 5 + 2) | | 8 − 12 | 4
実装コード
以下が、この処理を実現するJavaScriptのコードです。
const arr = [
[1, 3, 5],
[3, 5, 7],
[2, 4, 2]
];
const diagonalDiff = arr => {
let sum = 0;
for (let i = 0, l = arr.length; i < l; i++) {
sum += arr[i][l - i - 1] - arr[i][i];
}
return Math.abs(sum);
}
console.log(diagonalDiff(arr));コードの解説
このアプローチのポイントは、ループを1回だけ回すことで両方の対角線の計算を同時に行っている点です。
- arr[i][i]:主対角線(左上から右下)の要素にアクセスします。行番号と列番号が一致する位置です。
- arr[i][l - i - 1]:副対角線(右上から左下)の要素にアクセスします。行番号が増えるほど、列番号が減少する位置関係です。
- Math.abs(sum):最後に絶対値を取ることで、どちらの対角線の合計が大きくても正の値を返すようにしています。
この方法なら、時間計算量はO(n)となり、行列のサイズに関わらず効率的に処理できます。
出力結果
このコードをコンソールで実行すると、以下の出力が得られます。
4
-
Firebugを使ったJavaScriptデバッグ徹底ガイド|基本機能から実践手順まで
デバッグとは何か デバッグとは、ソフトウェアから欠陥(バグ)を体系的に取り除くプロセスのことです。作業はテストケースの実行から始まります。テストケースを実行すると、実際の結果と期待される結果が比較され、両者に不一致があれば根本原因の分析が行われます。さらに、リグレッションテストなどの追加テストを実施することで、結果が期待どおりのラインに沿っていることを確認します。 静的なWebページの作成にはHTMLが広く使われています。一方、動的なWebアプリケーションを開発するには、Webのスクリプト言語であるJavaScriptが欠かせません。コードをバグのない状態に保つため、プログラマーはさまざまなデ
-
JavaScriptのimportで波括弧「{}」を使う理由とは?名前付きエクスポートの基本をわかりやすく解説
JavaScript(ESモジュール)でモジュールを読み込む際、import 文に波括弧 { } を付けるかどうか迷ったことはありませんか?実はこの波括弧は、名前付きエクスポート(named export)を読み込むために必要な記法です。本記事では、実際のコード例を使いながら、{ } の役割と使い方を詳しく解説します。 importで { } を使う場面とは JavaScriptのESモジュールでは、エクスポート方法によって読み込み側の書き方が変わります。 名前付きエクスポート:export { 関数名 } のようにエクスポートされたものを読み込む場合は、import { 名前 } fro