JavaScriptで最も近い周囲長を持つ「ほぼ二等辺三角形」を求める方法
ほぼ二等辺整数三角形(Almost Isosceles Triangle)とは?
「ほぼ二等辺整数三角形」とは、3辺の長さがすべて整数で構成されており、そのうち2つの辺の長さの差がちょうど1単位となっている特殊な三角形のことです。一見すると二等辺三角形のように見えますが、厳密には2辺が等しくない点が大きな特徴です。
問題の概要
ここで求められているのは、三角形の周囲長(3辺の長さの合計)を指定する数値を引数として受け取り、その周囲長に最も近い「ほぼ二等辺三角形」の3辺の測定値を見つけ出して返すJavaScript関数を記述することです。
たとえば、目的とする周囲長が500である場合、それに最も近い周囲長を持つほぼ二等辺三角形は次のとおりです。
[105, 104, 181]
解法:コード例
以下は、この問題を解くためのJavaScriptコードです。
const perimeter = 500;
const almostIsosceles = (perimeter = 0) => {
let a = perimeter;
for(; a > 0; a--){
for(let b = perimeter; b > 0; b--){
for(let c = perimeter; c > 0; c--){
if(a + b + c > perimeter || a !== b + 1 || (Math.pow(a, 3) - Math.pow(b, 3) !== Math.pow(c, 2))){
continue;
}
return [a, b, c];
}
}
}
return [];
};
console.log(almostIsosceles(perimeter));
出力結果
[ 105, 104, 181 ]
コードの仕組み
この関数では、3重のループを使って考えられる辺の組み合わせを総当たりで調べています。各組み合わせに対して、次の3つの条件をすべて満たしているかどうかをチェックしています。
- 周囲長の制約: 3辺の合計(a + b + c)が、入力された周囲長以下であること
- ほぼ二等辺の条件: 辺aと辺bの差がちょうど1(a === b + 1)であること
- 数学的特性: a³ − b³ = c² という関係式を満たすこと
これらの条件をすべて満たす最初の組み合わせが見つかった時点で、その3辺を配列として返します。該当する三角形が存在しない場合は、空の配列を返します。
なお、この実装は総当たり(ブルートフォース)方式のため、指定する周囲長が大きくなるほど計算量が急増し、処理時間が長くなる点には注意が必要です。実際に動かしてみて挙動を確認しながら、条件式の意味を理解するとより深く学べます。
-
SeleniumでJavaScriptを含む複雑なページの読み込み完了を待つ方法
Seleniumでは、JavaScriptを多用した複雑なページでも、読み込みが完了するまで適切に待機することができます。ページの読み込み状態を確認するには、JavaScriptのdocument.readyStateメソッドを実行し、戻り値がcompleteになるまで待つのが一般的な手法です。基本構文JavascriptExecutorを使って、現在のページの準備状態(readyState)を取得します。JavascriptExecutor js = (JavascriptExecutor)driver; js.executeScript(return document.readyState
-
JavaScriptで長方形内に埋め込まれた正方形の周囲長の合計を求める方法
問題 下図のように、1つの長方形の中に正方形が5つ埋め込まれている状況を考えてみましょう。 このとき、それぞれの正方形の周囲長は次のようになります。 4 + 4 + 8 + 12 + 20 = 48 単位 一見すると複雑な計算が必要そうに思えますが、よく観察すると各正方形の一辺の長さがフィボナッチ数列(1, 1, 2, 3, 5, ...)に従っていることが分かります。つまり、n個の正方形が埋め込まれている場合、周囲長の合計は「最初のn項のフィボナッチ数の総和 × 4」で求められるのです。 そこで本記事では、数値 n を引数として受け取り、n個の正方形が埋め込まれた場合の周囲長の合計を返す